第八章 数据处理的两个基本问题
一、bx、si、di和bp
①在8086CPU寄存器中,只有这四个寄存器可以用在"[....]"中来表示进行内存单元的寻址。
②在[....]中,这4个寄存器可以单个出现,或者只能以4种组合出现:bx和si、bx和di、bp和si、bp和di。
③使用bx, si, di表示偏移地址时,默认段地址在ds中可以加前缀es, cs,ss。只要在[....]中使用寄存器bp,而指令中没有显性地给出段地址,段地址就默认在ss中,可以加前缀ds,es,cs。
二、机器指令处理的数据在什么地方
机器指令不关心数据的值是多少,只关心指令执行的前一刻。
将要处理的数据可以在三个地方:CPU内存、内存和端口。
汇编语言中数据位置的表达。
三、汇编语言中数据位置的表达。
①立即数(idata):对于直接包含在机器指令中的数据(执行在CPU的指令缓冲器中),在汇编语言中称为:立即数。
②寄存器:指令要处理的数据在寄存器中,在汇编指令中给出相应的寄存器名。
③段地址(SA)和偏移地址(EA):在汇编语言中可以用[X]的格式给出EA,SA在某个段寄存器中。
四、寻址方法(略)
①直接寻址 ②寄存器间接寻址 ③寄存器相对寻址 ④基址变址寻址 ⑤相对基址变址寻址
详见书P164表格8.2举例
五、指令要处理的数据有多长(两个尺寸:byte和word)
①通过寄存器名指明要处理的数据的尺寸。
eg:al->byte, ax->word
②在没有寄存器名存在的情况下,用操作符X ptr指明内存单元的长度,X在汇编指令中可以为word或byte。
eg:mov word ptr ds:[0],1 mov byte ptr ds:[0],1
③其他方法
有些指令默认了访问的是字单元还是字节单元。
eg:push [1000H]
六、寻址方式的综合应用(略)
七、div指令
div是除法指令,分以下两种情况运用:
格式:div reg
div 内存单元
eg:div byte ptr ds:[0]
(al)=(ax)/((ds)*16+0)的商
(ah)=(ax)/((ds)*16+0)的余数
补充:无符号乘法指令mul
语法格式:mul 乘数
eg:计算16*4:
八、伪指令dd
dd用于定义dword(double word,双字)型数据
区别db 1/dw 1/dd 1
第一个数据为01H,在data:0处,占一个字节;
第二个数据为0001H,在data:1处,占2个字节;
第三个数据为00000001H,在data:3处,占4个字节。
九、dup
一个操作符,由编译器识别处理的符号。和dd、db、dw等数据定义伪指令配合使用,用于数据的重复。
eg: db 3 dup(0,1,2)=db 0,1,2,0,1,2,0,1,2
db 3 dup('abc','ABC')=db'abcABCabcABCabcABC'
格式:db/dw/dd 重复的次数 dup (需要重复的数据)