- 打卡等级:以坛为家I
- 打卡总天数:217
- 最近打卡:2024-11-15 09:12:27
荣誉版主
- 积分
- 2790
|
发表于 2023-8-30 09:17:22
|
显示全部楼层
2023/08/22 第二十四集
汇编语言程序设计
汇编注重逻辑
汇编程序是啥
是汇编语言助记符 + 汇编器助记符命令
谁家的汇编都是这两部分
汇编器助记符不翻译成机器指令
例子1:
code 中的四个 立即数 搬到 edata里面
用C来说 (应该对吧,自己是这样理解的)
short code a[4] = {0x13,0x0,0x2,0x4};
short b[4];
for(i = 0;i<4;i++)
{
b[i] = a[i];
}
汇编代码
data_seg1 SEGMENT CODE ;声明个代码段
RSG data_seg1 ;用这个代码段
TABLE: DW 0x0123,0x4567,0x89ab,0xcdef ;用DW 建个表 地址由链接器分频
data_seg2 SEGMENT EDATA ;声明个edata段
RSG data_seg2 ;用这个edata段
STORE: DSW 4 ;整4个空间 8个字节
prog_seg SEGMENT CODE ; 代码段
RSEG porg_seg ;用代码段
LJMP main ;跳主程序
ORG 0x0220 ;跳过中断的区域
main:
MOV DPTR,#TABLE ;指向表首地址
MOV WR0,#STORE ;把整个地址给寄存器
MOV R4,#0x4 ;要循环的次数
CON:
MOV A,#0x0 ; 给累加器 0
MOVC A,@A+DPTR ; 开始指向第一个数据
MOV R2,A ; 放寄存器R2
INC DPTR ; DPTR+1
MOV A,#0X0 ; 又清0
MOV A,@A+DPTR ; 指向后8位
MOV R3,A ; 后8位放R3 由于R2 R3组成WR2
MOV @WR0,WR2 ; 把WR2中 数据给WR0 中对应的地址
INC DPTR ; 指向code中下一个数据的地址
ADD WR0,#0x2 ; 指向edata放下个放数据的地址
MOV A,R4 ; R4是循环的次数
SUBB A,#0x1 ; A-1
MOV R4,A ; A 放R4
JNZ CON ; 不为零就 跳CON里 这就相当于for循环
NOP ;空指令
为便于理解,给程序添加了逐行注释 。
segment 段
同名合并
code data 等
|
|