汇编语言7~9章要点总结

1.段寄存器必须使用ds,es这种专用的段寄存器,否则会报错left operand must have segment(操作数右边要求它左边必须为某个段)
and指令的作用:通过该指令将操作对象的相应位设为0,其他位不变。
or指令:使操作对象的相应位设为1,其他位不变。
2.大小写问题:大写字母和小写字母的其他位一样,大写字母的第五位为0,小写字母的第五位为1,这样我们就有了一种新的方法:将它的第五位置0,它就必须变为大写字母,将它的第五位置1,它就必须变为小写字母。
and al,11011111b
or al,00100000b

3.si和di是8086cpu中和bx功能相近的寄存器,si和di不能够分成两个8位寄存器来使用。
4.几种寻址方式:[bx+si]和[bx+di],[bx+si+idata],[bx+di+idata]
5.cpu中的寄存器:si,ax,bx,cx,cs,ip,ds,dx,di,es,ss,sp,bp
6.cpu中只有bx,si,di,bp这四个寄存器可以用在[]中进行内存单元的寻址,并且寻址的时候只能以4种组合出现:bx和si,bx和di,bp和si,bp和di。
只要在[]中使用寄存器bp,而指令中没有显性地给出段地址,段地址就默认在ss中,比如以下指令
mov ax,[bp]
mov ax,[bp+idata]
mov ax,[bp+si]
mov ax,[bp+si+idata]
7.用word ptr指明了指令访问的内存单元是一个字单元
byte ptr指明了指令访问的内存单元是一个字节单元,
有些指令默认了访问的是字单元还是字节单元,比如push [1000H]就不用指明访问的是字单元还是字节单元,因为push指令只进行字操作。
8.[bx].10h[si] = bx+10h+si
9.div指令 被除数默认地放在ax或dx和ax中,
除数为8位时 ax:被除数 结果:ah:余数,al:商
除数为16位时 dx+ax:被除数 dx:余数,ax:商
执行div指令前,被除数必须被放置好到相应的寄存器中,除数的内容放在div指令的后面
10.db字节型数据,dw字型数据(2B),dd双字型数据(4B)
11.dup和db、dw、dd等数据定义伪指令配合使用的,用来进行数据的重复
db 3 dup(0)相当于db 0,0,0
db 3 dup(0,1,2)相当于db 0,1,2,0,1,2,0,1,2
db 3 dup(‘abc’,‘ABC’)相当于db’abcABCabcABCabcABC’
定义200字节的栈段
stack segment
db 200 dup(0)
stack ends

发布了17 篇原创文章 · 获赞 7 · 访问量 2988

猜你喜欢

转载自blog.csdn.net/znevegiveup1/article/details/103802826