1.and指令,可以设置操作对象的相应位为0(与操作)。
2.or指令,可以设置操作对象的相应位位1(或操作)。
3.si和di是8086CPU中和bx功能相近的寄存器,si和di不能够分成两个8位寄存器来使用。
4.在编程的时候因为寄存器的数量有限,我们应该把临时变量放到内存中(栈),这和高级语言中的local变量都存储在栈中很类似。
5.在8086CPU中,只有bx,si,di,bp这四个寄存器可以用来进行内存单元的寻址([...])。
6.在[...]中,这四个寄存器可以单个出现或只能以4中组合出现:bx和si,bx和di,bp和si,bp和di。当然他们也可以和立即数相加。比如
mov ax,[bx + si + idata]
7.只要在[...]中使用寄存器bp,而指令中没有显示的给出段地址,段地址就是默认在ss中的地址。
8.cpu处理的数据可以在三个地方存储,cpu内部,内存,端口。
9.直接寻址[idata],相当于c语言中的a[0],a[1]。
10.寄存器间接寻址[bx],相当于c语言中的a[x]。
11.寄存器相对寻址[bx+idata],相当于c语言中的结构体[bx].idata,二维数组a[x][0]。
12.基址变址寻址[bx+si],相当于c语言中的a[x][y]。
13.基址变址寻址[bx+si+idata],相当于[bx].idata[si]。
14.通过寄存器的类型指明了数据的尺寸。mov ax,1是字操作。mov al,1是字节操作。
15.在没有寄存器名存在的情况下,用操作符X ptr指明。比如mov word ptr ds:[0], 1;mov byte ptr ds:[0],1。
16.push指令只能执行字操作。
17.div除法指令使用规则:
(1) 除数:有8位和16位两种,在一个寄存器中或者内存中。
(2) 被除数:默认放在AX或DX和AX中。如果除数是8位,被除数是16为,默认放在AX中。如果除数是16位,被除数是32位,在DX和AX中存放,DX存放高位16位,AX存放地位16位。
(3) 结果:如果除数是8位,则AL存储商,AH存储余数。如果是16位,AX存储商,DX存储余数。
186A1(100001)
mov dx,1
mov ax,86A1H//
mov bx,100
div bx
执行结果ax=03e8h(1000),dx=1。
mov ax,1001
mov bl,100
div bl
al = 0AH ah = 1。
18.dd,dw,dd,dup都是伪指令。
db一个字节赋值
dw一个字赋值
dd两个字赋值
dup代表重复比如
db 3 dup(0) 相当于 db 0,0,0
db 3 dup(1,2,3)相当于db 1,2,3,1,2,3,1,2,3
19.jmp short 标号,是相对跳转,跳转范围-128~127。
20.jmp near ptr 标号,是相对跳转,跳转范围-32768~32767。
21.jmp far ptr 标号,是绝对跳转,也就是按照目标地址跳转,相对跳转是按照偏移量跳转。
22.jcxz是条件跳转cx = 0时跳转,cx != 0时什么也不做,跳转范围-128~127。
23.jmp short,jmp near ptr,jcxz,loop都是相对跳转,这种跳转的好处是程序无论放到什么内存地址中,都可以进行正确的跳转。