ax用来存放数据,bx存放内存偏移地址,cx存放循环次数,dx?
汇编语言的注释是";"
栈用于暂存数据,因为寄存器有限
1. and和or指令
1.1 and:逻辑与指令,按位与运算,全1为1
- 例如
mov al, 01100011B
and al, 00111011B
最后al = 0010011B
- 通过该指令可以将操作对象的相应位设置为0
and al, 10111111B
就把al的第七位设置为0
1.2 or:逻辑或指令,按位或运算,有1为1
- 例如
mov al, 01100011B
or al, 00111011B
最后al=01111011B
- 通过该指令可以把操作对象相应位设置为1
or al, 01000000B
就把al的第七位设置为1
2. ASCII码
一个ASCII码字符用一个字节表示就够了
2.1 db 'unIX’相当于 “db 75H, 6EH, 49H, 58H”
也就是对应字符的ASCII码
2.2 mov al, ‘a’ 相当于 mov al,61H
2.3 [bx+idata] 偏移地址
- mov ax, [bx + 200]
- mov ax, [200 + bx]
- mov ax, 200[bx]
- mov ax, [bx].200
2.4 用[bx+idata]的方式进行数组的处理
3. SI和DI寄存器
- SI和DI是8086CPU中和bx功能相近的寄存器
- 但是SI和DI不能分成两个八位寄存器使用。
- [bx+si+idata]和[bx+di+idata] idata指的是一个常量
- mov ax, [bx+200+si]
- mov ax, [200+bx+si]
- mov ax, 200[bx][si]
- mov ax, [bx].200[si]
- mov ax, [bx][si].200
- 常数在后边的话前边要加上一个点
4. 使用双重循环时候cx会被修改
loop s0的时候会先将cx-1,然后发现cx是ffff,就会变成死循环
- 把外层的cx的值先存储,当跳出内层循环时,再把外层循环的值恢复
5. 如果程序中经常需要数据来暂存,因为寄存器可能不够用,那可以选择内存,把需要暂存的数据放进内存中。
- 需要暂存数据的时候,使用栈
- 例如下边用了栈,暂存cx的值