[信息与通信]第3章:微机寻址和指令lyzv10.ppt

上传人:音乐台 文档编号:2001077 上传时间:2019-01-30 格式:PPT 页数:119 大小:773.50KB
返回 下载 相关 举报
[信息与通信]第3章:微机寻址和指令lyzv10.ppt_第1页
第1页 / 共119页
[信息与通信]第3章:微机寻址和指令lyzv10.ppt_第2页
第2页 / 共119页
[信息与通信]第3章:微机寻址和指令lyzv10.ppt_第3页
第3页 / 共119页
亲,该文档总共119页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《[信息与通信]第3章:微机寻址和指令lyzv10.ppt》由会员分享,可在线阅读,更多相关《[信息与通信]第3章:微机寻址和指令lyzv10.ppt(119页珍藏版)》请在三一文库上搜索。

1、第三章:微机寻址和指令,主讲老师:廉迎战 副教授,第三章 8086指令系统和寻址方式,学习目标 了解编辑程序、汇编程序、连接程序的功能及其输入、输出文件的类型 了解汇编语言源程序框架,熟悉程序段定义和过程定义伪操作 熟悉数据类型和数据定义伪操作 熟练掌握并运用8086指令集及各类寻址方式,课程主要内容 3.1 汇编语言程序格式 3.2 寻址方式与机器语言转换 3.3 8086指令系统,3.1 汇编语言程序格式 介绍两条常用指令:MOV 和 ADD MOV dst, src ; (dst) (src) 助记符 目的 源操作数 操作数 例: MOV AH,BL MOV AX,1234H ADD d

2、st, src ; (dst) (dst)+(src) 助记符 目的 源操作数 操作数 例: ADD AL,36H ADD BX,CX 源操作数(SRC):指令执行过程中,保留原值。 目的操作数(DST) :指令执行中,不保留原值结果存入其中。,指令系统:提供给用户编写程序的一组指令集,指令:,一字节指令: INC AX DEC CX 二字节指令: MOV AX, 2000H ADD AH, BL,寻址方式:包含:操作数寻址和指令寻址,3.2 寻址方式与机器语言转换,3.2 寻址方式和机器指令转换,指令中操作数字段实质上是指出操作数存放于何处。一般来说,操作数可以跟随在指令操作码之后,称为立即

3、数;操作数也可以存放在CPU内部的寄存器中,称为寄存器操作数。绝大多数的操作数存放在内存储器中,称为存储器操作数。指令指定操作数的位置,即给出地址信息,在执行时需要根据这个地址信息找到需要的操作数。这种寻找操作数的过程称为寻址,而寻找操作数的方法称为寻址方式。,指令寻址:指令寻址通过对CS:IP中IP加1修改,形成指令地址。主要是转移指令和调用指令的形成。 操作数寻址:寻找指令中操作数的方法。 操作数的来源: 操作数 包含在指令中。立即数 操作数 包含在寄存器中。寄存器 操作数 包含在内存单元中。单元地址或地址的计算方法。 操作数 包含I/O端口中。 操作数寻址方式: 隐含寻址 立即数寻址 寄

4、存器寻址 直接寻址 寄存器相对寻址 寄存器间接寻址 基址变址寻址 相对基址变址寻址,3.2 寻址方式与机器语言转换,8086的寻址方式,3.2.1 与数据有关的寻址方式 ( 8种 ),0. 隐含寻址方式* 在指令中不指明操作数。 MUL src ;隐含AL、AX,积存放AX或者AXDX中。 PUSH src ;SP POP dst ;SP 优点:不计算有效地址,执行速度快,为单字节指令。,1. 立即寻址方式* 操作数在指令中给出 MOV AL, 5 MOV AX, 3064H,优点:用于对寄存器赋值、速度快。仅仅用于源操作数。,2. 寄存器寻址方式* 操作数在指定的寄存器中 MOV AX, B

5、X ; AX、BX、CX、DX、SI、DI、SP、BP MOV AL, BH ;AH、AL、BH、BL、CH、CL、DH、DL,优点:SCR、DSC都在寄存器中,CPU内部速度快。,3. 直接寻址方式* -( 有效地址EA指令直接给出,操作数在RAM中。) 有效地址EA:操作数的偏移地址 物理地址PA = 16d (DS) + EA 例:MOV AX, 2000H EA=2000H, 假设(DS)=3000H, 那么(PA)=32000H 例:操作数地址可由变量(符号地址)表示 MOV AH, VALUE ( VALUE DB 10 ),50,30,32000,AH AL,30,50,(AX)

6、 = 3050H,低地址,高地址,优点:操作数在RAM中,默认段为当前段,若超越段需要说明(CS,SS,DS)。,例:MOV AX, 2000H EA=2000H, 假设(DS)=3000H, 那么(PA)=32000H,直接寻址方式* * 隐含的段为数据段 DS * 可使用段跨越前缀 MOV AX, ES :2000H ;表示有效地址 * 使用变量时,要注意变量的属性 VALUE DB 10 MOV AX, VALUE MOV AL, VALUE MOV AX, WORD PTR VALUE * 适于处理单个变量,4. 寄存器间接寻址方式* EA在基址寄存器(BX/BP) 或变址寄存器(SI

7、/DI)中 1)BX, SI, DI (DS) 物理地址 = 16d (DS) + 2)BP (SS) 物理地址 = 16d (SS) + (BP) 3)寄存器加 。 MOV AX, SI PA = 16d (DS) + (SI) MOV ES:BX , AX PA = 16d (ES) + (BX) MOV DX, BP PA = 16d (SS) + (BP),(BX) (SI) (DI),注意!,优点:操作数在RAM中,地址在指令中指定的某一寄存器中,例题:MOV AX,SI, 寄存器间接寻址方式* * 不允许使用AX、CX、DX存放EA MOV AX, CX * SRC 和 DST的字

8、长一致 MOV DL, SI ; SI指示一个字节单元 MOV DX, DI ; DI指示一个字单元 * 适于对数组、字符串、表格中的数据连续处理,5. 寄存器相对寻址方式* 例: MOV AX, COUNTSI 或 MOV AX, COUNT+SI 假设(DS)=3000H, (SI)=2000H, COUNT=3000H 那么 PA = 35000H 假设(35000H)=1234H, 那么 (AX)=1234H * 适于数组、字符串、表格的处理,有效地址 EA =,(BX) (BP) (SI) (DI),+,8位 16位,位移量,优点:操作数在RAM中,寄存器中存操作数的相对地址(偏移量

9、)。,【例4.5】,设执行前: (AX)=0040H,(BX)=0030H,(DS)=2000H,(20036H)=0050H 执行指令:ADD 6BX,AX 执行后:(AX)=?,(BX)=?,(DS)=?,(20036H)=? 图形表示如下:,执行:(20036H)+(AX) 20036H 执行后:(AX)=0040H,(BX)=0030H,(DS)=2000H,(20036H)=0090H。,6. 基址变址寻址方式* MOV AX, BXDI PA=(DS)24+(BX)+(DI) 或 MOV AX, BP+DI PA=(SS)24+(BX)+(DI) MOV AX, ES:BXSI P

10、A=(ES)24+(BX)+(SI) * 适于数组、字符串、表格的处理 * 必须是一个基址寄存器和一个变址寄存器的组合 MOV AX, BXBP MOV AX, SIDI,有效地址 EA=,(BX) (BP),+,(SI) (DI),优点:操作数在RAM中,EA地址=BX+SI,7. 相对基址变址寻址方式* MOV AX, MASKBXSI 或 MOV AX, MASKBX+SI 或 MOV AX, MASK+BX+SI * 适于堆栈处理和数组处理,有效地址EA =,(BX) (BP),+,(SI) (DI),+,8位 16位,位移量,寻址方式小结,例:编写一段显示字符串STRING的程序 D

11、ATA SEGMENT STRING DB HAPPY NEW YEAR!, 0DH , 0AH , $ COUNT DW 17 DATA ENDS (0)立即寻址 mov dl, H ; mov dl, H,DL=输出字符 mov ah, 2 ; DOS的2号功能调用 int 21h ; 显示字符H (1)直接寻址 mov dl, string ; mov dl, H mov ah, 2 int 21h ; 显示字符H mov dl, string+1 ; mov dl, A mov ah, 2 int 21h ; 显示字符A .,(2)寄存器间接寻址 mov cx, count ; mov

12、 cx, 17 mov bx, offset string ; string的偏址 bx next: mov dl, bx mov ah, 2 int 21h ; 显示一个字符 inc bx loop next ; 循环指令,(3)寄存器相对寻址 mov cx, count ; mov cx, 17 mov si, 0 next: mov dl, stringsi ; mov dl, string+si mov ah, 2 int 21h ; 显示一个字符 inc si loop next ; 循环指令,(4)基址变址寻址 mov cx, count ; mov cx, 17 mov bx,

13、offset string ; string的偏址 bx mov si, 0 next: mov dl, bxsi ; mov dl, bx+si mov ah, 2 int 21h ; 显示一个字符 inc si loop next ; 循环指令 (5)DOS显示字符串功能 mov dx, offset string ; string的偏址 dx mov ah, 9 ;9号功能调用 int 21h ; 显示一串字符,3.2.2 与转移地址有关的寻址方式,用来确定 转移指令 及 CALL指令 的转向地址。,段内寻址 段间寻址,段内直接寻址 段内间接寻址,段间直接寻址 段间间接寻址,以 转移(条

14、件转移/无条件转移)指令 为例,段内:转移指令与转向的目标指令在同一代码段中,(CS)不变。 段间:转移指令与转向的目标指令在两个代码段中, (CS)变化。,表示转移距离(称为位移量)的操作符: SHORT 短转移,位移量在-128127字节之间(8位)。 JMP SHORT NEXT NEAR 近转移,在同一段内转移,位移量在-3276832767 字节范围内(16位, 32KB)。 JMP NEAR PTR AGAIN FAR 远转移,表示转移距离超过32K字节, 或是在不同段之间转移。 JMP FAR PTR WAIT,1. 段内直接寻址 转向的有效地址EA = 转向地址 = 16d (

15、CS) + (IP)新,(IP)当前 + 位移量( 8bit / 16bit ),(IP)新,例: 段内直接寻址方式的示例 1060:000D EB04 JMP SHORT NEXT IP当前值 1060:000F 1060:0011 1060:0013 0207 NEXT: ADD AL,BX,2. 段内间接寻址 转向的有效地址EA是一个寄存器或存储单元的内容。 (可用除立即数以外的任何一种数据寻址方式得到) 物理地址 = 16d (CS) + EA 例: (BX)=1256H (SI)=528EH TABLE=20A2H (CS)=2000H (232F8H)=3280H (264E4H)

16、=2450H JMP BX ; (IP)1256H JMP TABLEBX JMP WORD PTR TABLEBX ; (IP)3280H JMP BXSI JMP WORD PTR BXSI ; (IP)2450H,3. 段间直接寻址 用指令中提供的转向段地址和偏移地址取代CS和IP 物理地址 = 16d (CS) + (IP) 例:,code1 segment EA 0250 2000 jmp far ptr next code1 ends,code2 segment next: . code2 ends,4. 段间间接寻址 用存储器中的两个相继字的内容取代CS和IP。 (存储单元的地址

17、可用除立即数和寄存器以外的任何一种 数据寻址方式得到) 物理地址 = 16 (DS) + EA 例: JMP DWORD PTR INTERS+BX,存储器,IP CS,4.2.3 I/O端口寻址方式,8086CPU采用独立编址的I/O端口,可以最多访问64K个字节端口或32K个字端口,用专门的IN指令和OUT指令访问。I/O端口寻址只用于这两种指令中。寻址方式有如下两种。 1. 直接端口寻址 在指令中直接给出端口地址,端口地址一般采用2位十六进制数,也可以用符号表示,这种寻址方式为直接端口寻址。因此,直接端口寻址可访问的端口数为0255个。 例如:IN AL,25H 2. 寄存器间接端口寻址

18、 如果访问的端口地址值大于255,则必须用I/O端口的间接寻址方式。所谓间接寻址,是指把I/O端口的地址先送到DX中,用DX作间接寻址寄存器,而且只能用DX寄存器。 例如:MOV DX,378H OUT DX,AL,3.3 IBM PC机的指令系统, 数据传送指令 算术指令 逻辑指令 串处理指令 控制转移指令 处理机控制指令,注意:1. 指令的基本功能 及指令格式 2. 指令的执行对标志位的影响 3. 对寻址方式或寄存器使用的限制和隐含使用的情况,3.3.1 数据传送指令 通用数据传送指令 累加器专用传送指令 地址传送指令 标志寄存器传送指令,1. 通用数据传送指令 传送指令: MOV DST

19、, SRC 执行操作: (DST) (SRC) 注意: * DST不能是CS * 不影响标志位 * DST、SRC不同时为段寄存器 MOV DS, ES * 立即数不能直接送段寄存器 MOV DS, 2000H,传送指令 “ MOV DST, SRC” 的示意图,例: MOV AX, DATA_SEG MOV DS, AX 例: MOV AL, E ; MOV AL, 45H 例: MOV BX, OFFSET TABLE 例: MOV AX, YBPSI,返回, 进栈指令: PUSH SRC 执行操作: (SP) (SP) - 2 ( (SP)+1, (SP) ) (SRC) 出栈指令: P

20、OP DST 执行操作: (DST) (SP)+1, (SP) (SP) (SP) + 2 堆栈:“先进后出”的存储区,存在于堆栈段中,SP在任何 时候都指向栈顶。 注意: * 堆栈操作必须以字为单位。 * 不影响标志位 * 不能用立即寻址方式 PUSH 1234H * DST不能是CS POP CS,8086/8088的堆栈,建栈 MOV AX ,1050H MOV SS ,AX MOV SP ,000 EH,进栈 PUSH AX (设 AX=1234H) PUSH BX (设 BX=5CF8H),1050FH,10500H,初始栈顶,(栈底),SP= 0EH,SS= 1050H,堆栈起地址

21、,栈的范围,SP= 0EH,12H,34H,SP= 0CH,5CH,F8H,SP= 0AH,10500H,(不变),1050FH,SS = 1050H,- 2,- 2,当前栈顶,进栈后的SP和SS的值 SP=000AH SS=1050H,进栈前SP和SS的值 SP=000EH SS=1050H,(变化),(AX),(BX),8086通过赋值SS和SP建栈,进栈操作:先SP减 2,再内容进栈。,高,低,出栈操作:先栈顶内容出栈,再修改SP,使SP加2。(字操作),出栈 POP CX POP DS,SP= 0EH,12H,34H,SP= 0CH,5CH,F8H,SP= 0AH,10500H,(不变

22、),1050FH,SS = 1050H,- 2,- 2,当前栈顶,出栈前的SP和SS的值 SP=000AH SS=1050H,(变化),SP= 0EH,CX=5CF8H,DS=1234H,SS=1050H,出栈后SP和SS的值 SP=000EH SS=1050H,SP=0AH,SP=0CH,+2,+2,F8H,5CH,34H,12H,1050FH,高,低,例: 假设 (AX) = 2107 H , (AH)=21H,(AL)=07H 执行 PUSH AX,(SP),低地址,高地址,(SP),07H 21H,低地址,高地址,进栈方向,* *,* *,* *,* *,PUSH AX 执行前,PUS

23、H AX 执行后,例: POP BX,(SP),低地址,高地址,(SP),07H 21H,低地址,高地址,出栈方向,07H 21H,(BX) 2107H,(BH)=21H,(BL)=07H (SP) (SP)+2,POP BX 执行前,POP BX 执行后,* *,* *,* *,* *,例: PUSH DS SUB AX, AX PUSH AX RET 例: PUSH AX PUSH BX POP BX POP AX,;其间用到AX和BX寄存器,MOV AX, 4C00H INT 21H, 交换指令: XCHG OPR1, OPR2 执行操作: (OPR1) (OPR2) 注意: * 不影响

24、标志位 * 不允许使用段寄存器 例:XCHG BX, BP+SI ;(BX) (PA) XCHG AL, BH ;(AL) (BH),2. 累加器专用传送指令(只限于使用AX或AL) 输入指令 IN ac, PORT ;(I/O CPU) 长格式: IN AL, PORT (字节);PORT=0FFH IN AX, PORT (字) 执行操作:(AL) (PORT) (字节) (AX) (PORT+1, PORT)(字) (AH) (PORT+1), (AL) (PORT) 短格式: IN AL, DX (字节) ;PORTFFH IN AX, DX (字) 执行操作:(AL) ( (DX)

25、) (字节) (AX) ( (DX)+1, (DX) )(字),输出指令 OUT PORT, ac ;(CPU I/O) 长格式: OUT PORT, AL (字节) ;PORT=0FFH OUT PORT, AX (字) 执行操作:(PORT) (AL) (字节) (PORT+1, PORT) (AX)(字) (PORT+1) (AH), (PORT) (AL) 短格式: OUT DX, AL (字节) ;PORTFFH OUT DX, AX (字) 执行操作:( (DX) ) (AL) (字节) ( (DX)+1, (DX) ) (AX)(字),注意: * 不影响标志位 * 前256个端口

26、号00HFFH可直接在指令中指定(长格式) * 如果端口号 256,端口号 DX(短格式) * 只限于使用累加器传送信息 例: IN AX, 28H ; MOV DX, 28H ; IN AX, DX MOV DATA_WORD, AX 例: MOV DX, 3FCH 例:OUT 5, AL OUT DX, AL 例:测试某状态寄存器(端口号27H)的第2位是否为1 IN AL, 27H TEST AL, 00000100B JNZ ERROR ;若第2位为1,转到ERROR处理,mov dx, 100 in al, 61h and al, 11111100b sound: xor al,00

27、000010b out 61h, al mov cx, 140h wait1: loop wait1 ;140h决定脉冲的宽度 dec dx ; dx=100D决定脉冲的个数, jnz sound ;即50个高电平,50个低电平。,换码指令:XLAT 或 XLAT OPR 执行操作:(AL) (DS*16+ (BX) + (AL) ) 例:MOV BX, OFFSET TABLE ; (BX)=0040H MOV AL, 3 XLAT TABLE 指令执行后 (AL)=33H 注意: * 不影响标志位 * 字节表格(长度不超过256) 首地址 (BX) * 需转换代码 (AL),3. 地址传送

28、指令 有效地址送寄存器指令: LEA REG, SRC 执行操作: (REG) SRC 指针送寄存器和DS指令: LDS REG, SRC 执行操作: (REG) (SRC) (DS) (SRC+2) 4个相继字节 寄存器(通常是SI)和 DS 指针送寄存器和ES指令: LES REG, SRC 执 行操作: (REG) (SRC) (ES) (SRC+2) 4个相继字节 寄存器(通常是DI)和 ES,4. 标志寄存器传送指令 标志送AH指令: LAHF 执行操作: (AH) (FLAGS的低字节) AH送标志寄存器指令: SAHF 执行操作: (FLAGS的低字节) (AH) 标志进栈指令:

29、 PUSHF 执行操作: (SP) (SP) - 2 ( (SP)+1, (SP) ) (FLAGS) 标志出栈指令: POPF 执行操作: (FLAGS) (SP)+1, (SP) (SP) (SP) + 2 * 影响标志位 * 隐含的操作数寄存器是AH和FLAGS,3.3.2 算术指令 加法指令 减法指令 乘法指令 除法指令 十进制调整指令,参与加减运算的操作数如下两图所示,1. 加法指令 加法指令: ADD DST, SRC 执行操作: (DST) (SRC) + (DST) 带进位加法指令: ADC DST, SRC 执行操作: (DST) (SRC) + (DST) + CF 加1指

30、令: INC OPR 执行操作: (OPR) (OPR) + 1,注意: * 除INC指令不影响CF标志外,均对条件标志位 有影响。,加法指令对条件标志位(CF/OF/ZF/SF)的影响:,CF位表示无符号数相加的溢出。 OF位表示带符号数相加的溢出。,例:双精度数的加法 (DX, AX )= 0002 F365H (BX, CX )= 0005 E024H 指令序列 (1) ADD AX, CX (2) ADC DX, BX (1) 执行后,(AX)= 0D389H CF=1 OF=0 SF=1 ZF=0 (2) 执行后,(DX)= 0008H CF=0 OF=0 SF=0 ZF=0,2.

31、减法指令 减法指令: SUB DST, SRC 执行操作: (DST) (DST) - (SRC) 带借位减法指令: SBB DST, SRC 执行操作: (DST) (DST) - (SRC) - CF 减1指令: DEC OPR 执行操作: (OPR) (OPR) - 1 求补指令: NEG OPR 执行操作: (OPR) - (OPR) 比较指令: CMP OPR1, OPR2 执行操作: (OPR1) - (OPR2),注意: * 除DEC指令不影响 CF标志外,均对条 件标志位有影响。,减法指令对条件标志位(CF/OF/ZF/SF)的影响:,CF位表示无符号数减法的溢出。 OF位表示

32、带符号数减法的溢出。 NEG指令对CF/OF的影响: CF位:操作数为0时,求补的结果使CF=0,否则CF=1。 OF位:字节运算对-128求补或字运算对-32768求补时OF=1, 否则OF=0。,或,例:x、y、z均为双精度数,分别存放在地址为X, X+2; Y, Y+2;Z, Z+2的存储单元中,用指令序列实现 w x+y+24-z ,并用W, W+2单元存放w。 MOV AX, X MOV DX, X+2 ADD AX, Y ADC DX, Y+2 ; x+y ADD AX, 24 ADC DX, 0 ; x+y+24,需要考虑进位的问题 SUB AX, Z SBB DX, Z+2 ;

33、 x+y+24-z MOV W, AX MOV W+2, DX ; 结果存入W, W+2单元,3. 乘法指令 无符号数乘法指令: MUL SRC 带符号数乘法指令: IMUL SRC 执行操作:字节操作数 (AX) (AL) * (SRC) 字操作数 (DX, AX) (AX) * (SRC),注意: * AL(AX)为隐含的乘数寄存器。 * AX(DX,AX)为隐含的乘积寄存器。 * SRC不能为立即数。 * 除CF和OF外,对条件标志位无定义。,乘法指令对CF/OF的影响:,例:(AX) = 16A5H,(BX) = 0611H (1) IMUL BL ; (AX) (AL) * (BL)

34、 ; A5*11 5B*11=060B F9F5 ; (AX) = 0F9F5H CF=OF=1 (2) MUL BX ; (DX, AX) (AX) * (BX) ; 16A5*0611=0089 5EF5 ; (DX) = 0089H (AX) = 5EF5H CF=OF=1,4. 除法指令 无符号数除法指令: DIV SRC 带符号数除法指令: IDIV SRC 执行操作: 字节操作 (AL) (AX) / (SRC) 的商 (AH) (AX) / (SRC) 的余数 字操作 (AX) (DX, AX) / (SRC) 的商 (DX) (DX, AX) / (SRC) 的余数 注意: *

35、 AX(DX,AX)为隐含的被除数寄存器。 * AL(AX)为隐含的商寄存器。 * AH(DX)为隐含的余数寄存器。 * SRC不能为立即数。 * 对所有条件标志位均无定义。,5. 符号扩展指令: CBW AL AX 执行操作: 若(AL)的最高有效位为0,则(AH)= 00H 若(AL)的最高有效位为1,则(AH)= 0FFH CWD AX (DX,AX) 执行操作:若(AX)的最高有效位为0,则(DX)= 0000H 若(AX)的最高有效位为1,则(DX)= 0FFFFH,注意: * 无操作数指令 * 隐含对AL或AX进行符号扩展 * 不影响条件标志位,例:(AX)=0BA45H CBW

36、; (AX)=0045H CWD ; (DX)=0FFFFH (AX)=0BA45H,例:DATA SEGMENT A DW 9400H ;被除数 B DW 0060H ;除数 Q DW ? ;商 R DW ? ;余数 DATA ENDS (a) 带符号除: MOV AX,A ;(AX)=9400H CWD ;(DX,AX)=FFFF 9400H IDIV B ;0000 6C00H / 0060H MOV Q,AX ;(AX) Q=0120H MOV R,DX ;(DX) R=0 (b) 无符号除: MOV AX,A ;(AX)=9400H MOV DX,0 ;(DX)=0000 DIV B

37、 ;0000 9400H / 0060 MOV Q,AX ;(AX) Q=018AH MOV R,DX : (DX) R=0040H 如何判断除法结果有效? 除数为0除法错:0型中断处理 溢出被除数高一半除数时,商16位或8位,产生溢出,例:x,y,z,v均为16位带符号数,计算(v-(x*y+z-540)/x MOV AX, X IMUL Y ; x*y (DX,AX) MOV CX, AX MOV BX, DX ; (DX,AX) (BX,CX) MOV AX, Z CWD ; WORD DWORD ADD CX, AX ADC BX, DX ; x*y+z SUB CX, 540 SBB

38、 BX, 0 ; x*y+z-540,需要考虑借位的问题 MOV AX, V CWD SUB AX, CX SBB DX, BX ; v-(x*y+z-540) IDIV X ; (v-(x*y+z-540)/x,6. 十进制调整指令 BCD码:用二进制编码的十进制数,又称二-十进制数 压缩的BCD码:用4位二进制数表示1位十进制数 例:(59)10 (0101 1001)BCD 非压缩的BCD码:用8位二进制数表示1位十进制数 例:(59)10 (0000 0101 0000 1001)BCD 数字的ASCII码是一种非压缩的BCD码 DIGIT ASCII BCD 0 0011 0000

39、0000 0000 1 0011 0001 0000 0001 2 0011 0010 0000 0010 9 0011 1001 0000 1001,例:写出(3590)10的压缩BCD码和非压缩BCD码,并 分别把它们存入数据区PAKED和UNPAK。 压缩BCD: (3590)10(0011 0101 1001 0000)BCD 非压缩BCD: (3590)10(00000011 00000101 00001001 00000000)BCD,例: DATA SEGMENT BCD1 DB 34H, 18H ; (1834)BCD BCD2 DB 89H, 27H ; (2789)BCD

40、BCD3 DB 2 DUP (?) DATA ENDS (1) BCD3 BCD1 + BCD2 ; (4623)BCD (2) BCD3 BCD1 - BCD2 ; (9045)BCD,(1) MOV AL, BCD1 ; (AL)=34H ADD AL, BCD2 ; (AL)=34+89=BDH DAA ; (AL)=BD+60+06=23H AF=CF=1 MOV BCD3, AL ; (BCD3)=23H MOV AL, BCD1+1 ; (AL)=18H ADC AL, BCD2+1 ; (AL)=18+27+1=40H AF=1 CF=0 DAA ; (AL)=40+06=46H

41、 MOV BCD3+1, AL ; (BCD3+1)=46H (2) MOV AL, BCD1 ; (AL)=34H SUB AL, BCD2 ; (AL)=34-89=ABH DAS ; (AL)=AB-60-06=45H AF=CF=1 MOV BCD3, AL ; (BCD3)=45H MOV AL, BCD1+1 ; (AL)=18H SBB AL, BCD2+1 ; (AL)=18-27-1=F0H DAS ; (AL)=F0-60=90H MOV BCD3+1, AL ; (BCD3+1)=90H,非压缩的BCD调整指令(该节略) 加法调整指令:AAA (AL) (AL)非压缩BC

42、D 减法调整指令:AAS (AL) (AL)非压缩BCD 注意: * 隐含的操作寄存器为AL * 紧接在加减指令之后使用 * 除AF、CF外,对其它条件标志位无定义,乘法调整指令:AAM (AL) (AX)非压缩BCD 注意: * 隐含的操作寄存器为AL * 紧接在MUL指令之后使用 * 对OF、CF、AF无定义 调整方法: (AL)除以0AH,商 (AH),余数 (AL) 除法调整指令:AAD(在DIV指令之前使用) 被除数(AX) = (0000 xxxx 0000 xxxx)非压缩BCD 除数 = (0000 xxxx)非压缩BCD (AL)2 0AH (AH)+(AL) (AH)2 0

43、,例:(AX)0504H (BL)03H (1) (AL)*(BL) MUL BL ; (AX)=000CH AAM ; (AH)=01H (AL)=02H (2) (AX)/(BL) AAD ; (AH)=00H (AL)=36H DIV BL ; (AH)=00H (AL)=12H AAM ; (AH)=01H (AL)=08H,7. 逻辑指令 逻辑运算指令 移位指令,逻辑非指令:NOT OPR * OPR不能为立即数 执行操作: (OPR) (OPR) * 不影响标志位 逻辑与指令:AND DST, SRC 执行操作: (DST) (DST) (SRC) 逻辑或指令:OR DST, SRC 执行操作: (DST) (DST) (SRC) 异或指令: XOR DST, SRC 执行操作: (DST) (DST) (SRC)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1