汇编 第八章 数据处理的两个基本问题

约定:

用reg表示一个寄存器

sreg表示一个段寄存器 ds  ss  cs  es 

reg8  :8位寄存器

reg16: 16位寄存器

mem8:表示字节单元(内存单元)

mem16 :表示字单元(内存单元)

1.概述

2.汇编指令中操作数类型

3.8086中可用于存放内存单元偏移地址的寄存器

4.8086中已学寄存器一览

5.操作数寻址方式

6.汇编运算符ptr

7.数据定义伪指令db/dw/dd和操作符dup

8.无符号除法指令div

9.小结

汇编指令中操作数类型:

常数:cpu内部,指令缓冲器,

寄存器:cpu内部,寄存器

内存单元:cpu外部,内存

8086cpu中已学的寄存器

通用寄存器:AX,BX,CX,DX

变址寄存器:SI,DI

段寄存器:CS,DS,SS,ES

指令指针寄存器:IP

栈指针寄存器:SP

可用于表示内存单元的寄存器

BX,SI,DI,BP

可以单个出现,也可以组合出现

使用BX,SI,DI表示偏移地址时,默认段地址在DS中,可以加前缀es,cs,ss

使用BP,SI,DI表示偏移地址时,默认段地址在SS中,可以加前缀ds,es,cs

注:除此之外的其他寄存器组合都是非法的

寻址方式

   ① mov ax,  [0]               ;直接寻址
   ② mov  ax, [bx]              ;寄存器间接寻址
   ③ mov cx,  [bx+3]            ;寄存器相对寻址
   ④ mov ax,  [bx+si]           ;基址变址寻址
   ⑤ mov ax,  [bx+si+3]         ;相对基址变址寻址

如何在机器指令中声明进行的是字操作还是字节操作

(1).通过寄存器名指明要处理的数据的尺寸

如:ax,al,ah

(2).在没有寄存器名存在的情况下,用操作符X ptr 指明内存单元的长度,X在汇编指令中可以为word或byte

如:

mov word ptr ds:[0],1
mov word ptr [bx]
mov byte ptr ds:[0],1
mov byte ptr [bx],2

有些指令默认了访问的是字单元还是字节单元,如push只进行字操作

8086CPU提供的如[bx+idata+si]的寻址方式为结构化数据的处理提供了方便

用bx定位整个结构体,用idata定位结构体中的某一个数据项,用si定位数组项中每个元素 

可以写成[bx].data,[bx].idata[si]  

C语言中结构体

汇编指令:div和mul

无符号除法指令div

无符号乘法指令mul

1.div

格式:div 除数(reg或内存单元)

被除数:默认放在AX或DX和AX中

如果除数为8位,被除数为16位,默认在AX中存放;

如果除数为16位,被除数为32位,DX存放高16位,AX存放低16位

结果:

如果除数为8位,则AL存储除法操作的商,AH存储除法操作的余数;

如果除数为16位,则AX存储除法操作的商,DX存储除法操作的余数

2.mul

格式mul 乘数

如果都为8位,被乘数放在al中,积16位放在ax中

如果都为16位  被乘数放在ax中,积32位 规定在dx:ax

 

汇编伪指令:db,dw,dd,dup

data  segment
    db   1,2,3   ; 每个数据分配1个字节
    dw  1,2 3; 每个数据分配2个字节
    dd   1,2,3; 每个数据分配4个字节
data ends

伪指令dup

data  segment
    db   0,0,0,0,0,0,0,0
    db  8 dup(0); 预留8个字节单元,每个单元值为0
    dd  8 dup(?); 预留8个字节单元,每个单元值未分配
data ends
data segment db 1,2,3,1,2,3,1,2,3 db 3 dup(1,2,3); 等价于前一行 data ends

  

 

 

 

原文地址:https://www.cnblogs.com/wtblogwt/p/10066622.html