汇编语言入门-第八章 数据处理的两个基本问题

📅 2026/6/30 23:35:40
汇编语言入门-第八章 数据处理的两个基本问题
本章对前面内容是具有总结性的我们知道计算机时进行数据处理运算的机器那么有两个进本的问题就包含在其中1处理的数据在什么地方2要处理的数据有多长我们定义的描述性符号reg和sregreg:ax bx cx dx ex si di sp bpsreg: ds cs ss es8.1 bx,si,di,bp1)mov ax,[bx]mov ax,[bxsi]mov ax,[bxdi]mov ax,[bp]mov ax,[bpsi]mov ax,[bpdi]2) 在[...]中这4个寄存器可以单个出现或只能以四种组合出现bx和si,bx和di,bp和si,bp 和di .3)只要在【...】中使用寄存器bp 而指令中没有显性得给出段地质段地址就默认在ss中比如mov ax,[bp] 含义 ax((ss)*16(bp))mov ax,[bpidata] 含义 (ax) ((ss)*16(bp)idata)mov ax,[bpsi] 含义(ax)((ss)*16(bp)(si))mov ax,[bpsiidata] 含义ax((ss)*16(bp)(si)idata)8.2 机器指令处理的数据所在得位置所要处理的数据可以在三个地方 cpu内部内存端口mov bx,[0] 内存ds:0 单元mov bx,ax cpu 内部ax寄存器mov bx,1 cpu 内部指令缓冲器8.3 汇编语言中数据位置的表达1立即数(idata)mov ax,1add bx,2000hor bx,0001000bmov al,a2)寄存器mov ax,bxmov ds,axpush bxmov ds:[0],bxpush dsmov ss,axmov sp,ax3)段地址(SA)和偏移地址(EA)mov ax,[0] 段地址ds存放段地址的寄存器也可以是显性给出的比如mov ax,ds:[bp] 含义:(ax)((ds)*16(bp))mov ax,es:[bx] 含义(ax)((es)*16(bx))mov ax,ss:[bxsi] 含义(ax)((ss)*16(bx)(si))mov ax,cs:[bxsi8] 含义(ax)((cs)*16(bx)(si)8)8.4 寻址方式【idata】 EAidata;SA(ds) 直接寻址【bx】 EA(bx);SA(ds) 寄存器间接寻址[si] EA(si);SA(ds) 寄存器间接寻址[di] EA(di);SA(ds) 寄存器间接寻址[bp] EA(bp);SA(SS) 寄存器间接寻址【bxidata】 EA(bx)idata;SA(ds) 寄存器相对寻址【siidata】 EA(bx)idata;SA(ds) 寄存器相对寻址[diidata] EA(di)idata;SA(ds) 寄存器相对寻址[bpidata] EA(bp)idata;SA(ss) 寄存器相对寻址[bxsi] EA(bx)(si); SA(ds) 基址变址寻址 用于二维数组[bxdi] EA(bx)(di); SA(ds) 基址变址寻址[bpsi] EA(bp)(si);SA(ss)[bpdi] EA(bp)(di);SA(ss)[bxsiidata] EA(bx)(si)idata ; SA(ds)[bxdiidata] EA(bx)(di)idata; SA(ds)[bpsiidata] EA(bp)(si)idata; SA(ss)[bpdiidata] EA(bp)(di)idata; SA(ss)8.5 指令要处理的数据有多长1 通过寄存器名指明要处理的数据的尺寸。2 在没有寄存器名存在的情况下用操作符X ptr 指明内存单元的长度X在汇编指令中指明指明操作数是word 还是byte 。mov word ptr ds:[0],1mov byte ptr ds:[0],1在没有寄存器参与的对于内存的运算中显示的指明内存单元的长度是很有必要的。3其他方法有些指令默认了访问的是字单元还是字节单元比如push [1000H] 就不用指明访问的是字单元还是字节单元因为push 指令只进行字操作。8.6 寻址方式的综合应用8.7 div 指令div是除法指令使用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存储除法操作的余数。格式如下div regdiv 内存单元现在我们可以用多种方法来表示一个内存单元了比如div byte ptr ds:[0]含义为: (al)ax/((ds)*160)(ah)(ax)/((ds)*160) 的余数div word ptr es:[0]含义为(al)(ax)/((ds)*16(bx)(si)8) 的商(ah) (ax)/((ds)*16(bx)(si)8) 的余数div word ptr [bxsi8]含义为(ax)[(dx)*10000H(ax)]/((ds)*16(bx)(si)8) 的商dx[(dx)*10000h(ax)]/((ds)*16(bx)(si)8)的余数编程利用除法指令计算100001/100.被除数是32位186a1H 高16位在DX中低16位在AX中。除数是100 64H ,可以把64h,看作是16位数商放在AXdx放余数。编程利用除法指令计算1001/100.mov ax,3e9h mov bl,64h div bl结果为ax010A AH 0A 低位AL01;8.8 伪指令dddd 用来定义dword(double word,双子)型数据的比如data segment db 1 dw 1 dd 1 data ends问题8.1用div 计算data中的第一个数据除以第二个数据后的结果商存放在第三个数据的存储单元中。data segment dd 100001 dw 100 dw 0 data ends思考后分析data 段中的第一个数据是被除数为DWORD型32位所以再做除法之前用dx和ax存储。应将data:0 字单元中的低16位存储在AX中data:2 字单元中的高16位存储在DX中。8.9 dupdup 是一个操作符在汇编语言中同db,dw,dd等一样也是由编译器识别处理的符号。它是和db,dw,dd等数据定义伪指令配合使用的用来进行数据的重复。比如db 3 dup (0) db 3 dup(0,1,2) db 3 dup(abc,ABC)db 重复的次数dup(重复的字节型数据)dw重复的次数dup 重复的字型数据dd 重复的次数dup (重复的双子数据)实验7 寻址方式在结构化数据访问中的应用