16位汇编学习记录总结(2)

第十一节

NEG OPRD 取补指令

操作数为-128 -32768取补 操作数不变  OF=1

操作数为0时  求补运算的结果使CF=0,其他情况为1

操作数为双字时:DXAX  

NEG DX

NEG AX

SBB DX,0

 

CMP OPRD1,OPRD2 比较指令,和减法一样运算,但结果不送到OPRD1影响全部标志位

根据ZF是否置位来判断两者是否相等

 

双精度数操作:

通常DX存放高位字 AX放低位字

MOV AX,X

MOV DX,X+2

ADD AX,Y

ADC DX,Y+2   ;高位加,这里用ADC加上进位CF数值,同样SBB用在高位减法

从低位开始加、减。然后高位相加用ADCSBB加上进位或减去借位

DX16位  AX16

 

当前数段DS 1B00H,偏移地址2000H单元存有内容0FF10H8000H的指针,它们是16位变量的偏移地址和段地址,将该变量装入AX

MOV BX,[2000H]  ;直接寻

MOV ES,[2002H]

MOV AX,ES:[BX]

除了立即寻,操作数必须含有一个通用寄存器

 

第十二节

;;INC  WORD PTR BUF[BX]    是正确的,将BUF BX偏移处数据加1

 

乘除法运算指令

 

无符号数乘法

MUL OPRD    另一个操作数隐含在ALAX中,OPRD不能为立即寻址

高位不为0CF=1OF=1

 

有符号数乘法

IMUL OPRD   符号扩展后相乘 ,高位不为FFCF=1,OF=1

字节相乘AH放高半部分,字相乘DX放高半部分

 

除法指令

被除数总是隐含在寄存器AX中(除数8位)或DX,AX中(除数16位)

 

无符号除法指令

DIV OPRD

字节操作表示:(AL--->(AX)/(OPRD)的商,(AH)--->(AX)/(OPRD)的余数

字操作表示:(AX--->(DX,AX)/(OPRD)的商,(DX)--->(DX,AX)/(OPRD)的余

 

有符号除法

IDIV PORD

 

符号扩展指令  :不影响标志位

 

字节转换字指令

CBW  字节扩展为字

AL中的符号扩展到寄存器AH, 87H--->FF87H   34H--->0034H

 

CWD  字扩展为双字

AX中的符号扩展到DX

 

 

**立即数不需要扩展

 

第十四节

逻辑运算指令

否操作指令

NOT OPRD  OPRD取反后回送给OPRD可以是通用寄存器,也可以是存储器操作数,不影响标志位

 

与操作指令

AND OPRD1OPRD2

执行后CF=0OF=0

AND AX,AX       CF=0相当于CF清零操作,若干位清零操作

 

或操作指令

OR OPRD1OPRD2

CF=0OF=0           PFZFSF反应运算结果标志AF未定义 ,用于若干位保持不变

 

异或操作指令

XOR OPRD1OPRD2

OR一样,若干位保持不变,若干位取反操作

 

测试指令

TEST OPRD1OPRD2

XOR相似,把两操作数按位与,但结果不回送到OPRD1,用于检测某些位是否为1

检测AL中位6或位2是否有一位为1

TEST AL,010000100B       都为ZF=1

 

测试AL中第2位是否为1,先去反,为1则跳到EXIT执行

MOV DL,AL

NOT DL

TEST DL,00000100B

JE EXIT

 

第十五节

 

移位指令:移一次以上,mcl

SAL OPRDm

SHL OPRDm  

算数左移和移逻辑左移一样,末位补零。左移1位相当于*2

 

SAR OPRD,m

算数右移,每移一位,左边的符号位保持不变,移出的最低位进入标志位,右移移位相当于/2

 

SHR OPRD,m

逻辑右移,低位进CF,左边补0

 

循环移位指令

循环右移

ROL OPRD,m

ROR OPRD,m

同时送CF、右移1

 

RCL  OPRD,m

RCR OPRD,m

先进CF,带进位循环右移,只影响CFOF

 

例子:

MOV CL,4

SHL DX,CL

MOV BL,AH

SHL AX,CL

SHR BL,CL

OR DL,BL

 

 

第十六节

转移指令

 

无条件转移指令

 

1)无条件段内直接转移指令

JMP NEXT(语句标号)

 

NEXT:  MOV AX,BX

 

2)无条件段内简介转移指令

JMP OPRD(寄存器,字存储单元)  

 

3)无条件段间直接转移指令

JMP FAR PTR 标号

EXIT 是定义在另一个代码段中的标号

 

4)无条件段间间接移指令

JMP DWOD PTR [1234H]  高字节内容送CS,低字节内容送IP  ,DWOD双字

 

1I/O映像区:也属于存储单元,但始终保持和外部I/O数据保持一致,特性区只读。我们常说的I0.0Q0.0iw0等为I/O映像地址。

2、外部实际物理地址:实际的I/O地址,没有存储区。

3、直接寻址:CPU访问I/O映像区地址里的内容

4、立即寻址:CPU跳过I/O映像区直接访问外设地址的内容

5、间接寻址:CPU访问的存储区域里放的数据作为地址,这个地址指向的存储单元内容为最终访问的目标。

6、指针:所谓指针也是存储单元,但它的内容是存储单元的地址。

 

 

 

 

第十八节

 

循环指令

 

1)计数循环指令

LOOP  标号      CX=CX-1;CX=0  循环结束

相当于   DEC CX

             JNZ 标号

 

2)等于/全零循环指令

NEXT:

CMP AX,BX

LOOPE NEXT

CX不为0或相等时跳转

LOOPZ

CX为零且ZF等于1,顺序执行

3)不等于/非零循环

LOOPNE 标号

LOOPNZ 标号

4)跳转指令

JCXZ 标号

CX等于0时转移到标号,通常用在循环的前面

 例:

block: 9,10,2,3,11,12

mov bx,offset block

mov ax,[bx]

inc bx

mov cx,99

next:

cmp ax,[bx]

jg max

mov ax,[bx]

max:

inc bx

loop next

mov max,ax

posted @ 2012-12-19 10:04  不懂事的计算机  阅读(226)  评论(0编辑  收藏  举报