汇编语言基础知识(三)

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都是相对跳转,这种跳转的好处是程序无论放到什么内存地址中,都可以进行正确的跳转。

 

你可能感兴趣的:(汇编)