汇编语言程序设计第05章顺序结构程序.ppt

上传人:za****8 文档编号:14442611 上传时间:2020-07-20 格式:PPT 页数:95 大小:779.06KB
收藏 版权申诉 举报 下载
汇编语言程序设计第05章顺序结构程序.ppt_第1页
第1页 / 共95页
汇编语言程序设计第05章顺序结构程序.ppt_第2页
第2页 / 共95页
汇编语言程序设计第05章顺序结构程序.ppt_第3页
第3页 / 共95页
资源描述:

《汇编语言程序设计第05章顺序结构程序.ppt》由会员分享,可在线阅读,更多相关《汇编语言程序设计第05章顺序结构程序.ppt(95页珍藏版)》请在装配图网上搜索。

1、汇编语言程序设计,齐志儒 高福祥 主编 东北大学出版社,第五章 顺序结构程序,5.1 程序设计的步骤 5.2 流程图的应用 5.3 程序的基本控制结构 5.4 数据传送指令 5.5 算术运算指令 5.6 逻辑操作指令 5.7 移位操作指令 5.8 状态标志位操作指令 5.9 简单的I/O功能调用 5.10 顺序结构程序举例,5.1 程序设计的步骤,1. 分析问题 2. 建立数学模型 3. 设计算法 4. 编制程序 5. 上机调试,5.2 流程图的应用,(1) 流程线 (2) 端点框 (3) 判断框 (4) 处理框 (5) 连接框,5.3 程序的基本控制结构,(1) 顺序结构,(2) 分支(选择

2、)结构,(3) 循环(迭代)结构,5.4 数据传送指令,数据传送指令共有12条: MOV PUSH POP XCHG XLAT LEA LDS LES LAHF SAHF PUSHF POPF,指令汇编格式: MOV dest,src 操作: 将一个源操作数(字节或字) 传送到目标操作数中。 dest(src) 受影响的状态标志位: 没有 说明: 指令中dest和src不能同时为存储器操作数; CS不能做为目标操作数使用,段寄存器 之间不能互相传送,立即数不能送入段寄存器。,1. MOV(move)传送,1,1. MOV(move)传送指令(举例),MOV ALPHA_W,AX MOV BET

3、A_B,AL MOV AL,ES:BX+SI+1000H MOV BX,1000H MOV DS,BX MOV BX+10,AL MOV BX,10H MOV DS,10H MOV CS,AX,2,1. MOV(move)传送指令(举例),MOV ALPHA_W,AX MOV BETA_B,AL MOV AL,ES:BX+SI+1000H MOV BX,1000H MOV DS,BX MOV BX+10,AL MOV BYTE PTR BX,10H MOVWORD PTR BX,10H,3,2.PUSH(push word onto stack)进栈,指令汇编格式: PUSH src 操作:堆

4、栈指示器减 2 SPSP-2 将给定的操作数存放到由SP指出的栈顶中。 (SP+1,SP)(src) 受影响的状态标志位: 没有 说明: PUSH指令的目标地址一定在当前堆栈中。SS内容为段基址,偏移量由堆栈指针SP指出。操作数一定是16位的寄存器或存储器操作数。,1,2.PUSH 指令举例,假定AX=1234H,BX=5678H,SS=2000H,SP=0100H,则执行下列指令后堆栈的状态是:,PUSH AX PUSH BX,2,2.PUSH 指令举例,PUSH AX PUSH BX,3,假定AX=1234H,BX=5678H,SS=2000H,SP=0100H,则执行下列指令后堆栈的状态

5、是,3. POP (pop word off stack into destination) 出栈,指令汇编格式: POP dest 操作:(1)将堆栈栈顶中存放的字传送到操作数中。 dest(SP+1,SP) (2) 堆栈指针加2 SPSP+2 受影响的状态标志位: 没有 说明:目标操作数只能是16位的存储器或寄存器操作数(CS除外)。,1,3.POP 指令举例,假定在执行指令:POP CX POP DX 之前,堆栈的状态如图所示。指令执行后CX, DX的内容及堆栈的状态?,2,3,3.POP 指令举例,假定SI=1234H,DI=5678H,则执行下列指令后DS,ES的内容是?,PUSHS

6、I PUSHDI POP DS POP ES,4. XCHG (eXCHanGe) 交换,指令汇编格式: XCHG dest,src 操作: dest的内容与src的内容互换。 (dest)(src) 受影响的状态标志位: 没有 说明: dest和src不能同时为存储器操作数。段寄存器、立即数不能作为操作数。,4. XCHG指令举例,XCHG AL,BL XCHG CL,BX XCHG BL,BX+SI+10 XCHG AX,AX XCHG AL,SI XCHG SI,BX+10 XCHG DX,DS XCHG AL,10,2,5. XLAT (translate) 转换表,指令汇编格式: X

7、LAT 操作:BX和AL内容之和指出的内存字节单元的内容送到AL中。 AL(BX+AL) 受影响的状态标志位: 没有 说明: XLAT指令用于查表。表的开始地址即表头地址由BX寄存器给出。AL中的原始值是要寻址的表中元素地址的位移量,规定表中第一个字节的位移量为0。这是一种特殊的基址变址寻址方式,基址寄存器为BX,变址寄存器为AL。,看如下的一种加密方式(替代加密): A B C D E F G H I J K L M N O P Q Y Z D M R N H X J L I O Q U W A C R S T U V W X Y Z B E G F K P T S V 明文:THIS IS

8、 A COMPUTER 密文:GXJE JE Y DWQAFGRB,5. XLAT 应用举例,2,5. XLAT 应用举例,JMTAB DB YZDMRNHXJLIOQ DB UWACBEGFKPTSV MOV AX,SEG JMTAB MOV DS,AX MOV BX,OFFSET JMTAB MOV AL,T; SUB AL,A MOV AH,0 ADD BX,AX MOV AL,BX,3,5. XLAT 应用举例,JMTAB DB YZDMRNHXJLIOQ DB UWACBEGFKPTSV MOV AX,SEG JMTAB MOV DS,AX MOV BX,OFFSET JMTAB M

9、OV AL,T; SUB AL,A XLAT,5,6. LEA (load effective address) 取有效地址,指令汇编格式: LEA dest,src 操作: 将指令中给出的存储器操作数的有效地址(即地址的偏移量)送到指定的寄存器中。 destEA 受影响的状态标志位: 没有 说明: LEA指令是将源操作数地址的偏移量,即有效地址传送到目标操作数中。源操作数必须是一个存储器操作数,标操作数可以是任一16位通用寄存器、指针寄存器或变址寄存器。,1,6. LEA指令举例,DATA1 DB 10H LEA BX,DATA1 MOV BX,OFFSET DATA1 MOV BX,100

10、0H MOV DI,2000H LEA AX,BX+1243H LEA DX,BX+SI+1234H,2,7.LDS (load data segment register) 加载数据段寄存器,指令汇编格式: LDS dest,src 操作:(1)将双字长存储器操作数中的低地址字传送到指定的寄存器中。 dest(EA) (2)将双字长存储器操作数中的高地址字传送到DS寄存器中。 DS(EA+2) 受影响的状态标志位: 没有 说明: LDS是将src指出的连续两个字的内容,即一个32位的指针变量传送到一对16位的目标寄存器中。高位字为段基地址,LDS指令将其传送到数据段寄存器DS中,低位字为偏移

11、量,传送到由dest指出的一个通用寄存器,指针寄存器或变址寄存器中,但不能是段寄存器。,8.LES (load data segment register) 加载附加段寄存器,指令汇编格式: LES dest,src 操作:(1)将双字长存储器操作数中的低地址字传送到指定的寄存器中。 dest(EA) (2)将双字长存储器操作数中的高地址字传送到ES寄存器中。 ES(EA+2) 受影响的状态标志位: 没有 说明: LDS是将src指出的连续两个字的内容,即一个32位的指针变量传送到一对16位的目标寄存器中。高位字为段基地址,LDS指令将其传送到附加段寄存器ES中,低位字为偏移量,传送到由des

12、t指出的一个通用寄存器,指针寄存器或变址寄存器中,但不能是段寄存器。,9. LAHF (load AH from flags) 取标志,指令汇编格式: LAHF 操作:标志寄存器低8 位的状态标志填写在AH寄存器相应位中。 AHSF:ZF:AF:PF:CF 受影响的状态标志位: 没有 说明: 此指令在80 x86中几乎无用,主要是为了保证与8080/8085向下兼容,才保留了该指令.,10. SAHF (store AH into flags) 存标志,指令汇编格式: SAHF 操作: 将AH寄存器中的相应位传送到状态标志寄存器相应位中。 SF:ZF:AF:PF:CFAH 受影响的状态标志位:

13、 SF,ZF,AF,PF,CF 说明: 此指令在80 x86中几乎无用,主要是为了保证与8080/8085向下兼容,才保留了该指令.,11. PUSHF (push flags onto stack) 标志进栈,指令汇编格式: PUSHF 操作: 将堆栈指针减2,然后将标志寄存器F中的值存储到栈顶字的对应位中; SPSP-2 (SP+1,SP)F 受影响的状态标志位: 没有,12. POPF (pop flags off stack) 标志出栈,指令汇编格式: POPF 操作:将位于堆栈栈顶字中的对应位写入标志寄存器F中,然后将堆栈指针加2 。 F(SP+1,SP) SPSP+2 受影响的状态

14、标志位: 所有标志位,5.5 算术运算指令,5.5.1 加法运算指令 5.5.2 减法运算指令 5.5.3 乘法运算指令 5.5.4 除法运算指令,5.5.1 加法运算指令,1. ADD (addition)加法 2. ADC(addition with carry)带进位加 3. INC(increment by 1)增1,1. ADD (addition) 加法,指令汇编格式: ADD dest,src 操作: 两个操作数求和,结果存目标操作数中。 dest(dest)+(src) 受影响的状态标志位: OF,SF,ZF,AF,PF,CF 说明: dest和src不能同时为存储器操作数和段

15、寄存器。 例: ADD AL,3 ADD CX,MEM_W ADD GAMABPDI,BL ADD BP+DI+OFFSET GAMA,BL,2. ADC (addition with carry) 带进位加法,指令汇编格式: ADC dest,src 操作: 两个操作数相加的同时,再加上CF。结果存入目标操作数中。 dest(dest)+(src)+CF 受影响的状态标志位: OF,SF,ZF,AF,PF,CF 说明:ADC指令主要用于多精度数据相加。 例: ADC AL,3 ADC DX,BX+10,2. ADC 指令应用,3字节数据相减: 123456H+789ABCH=8ACF12H,

16、MOV AL,56H MOV AH,34H MOV BL,12H ADD AL,0BCH ADC AH,9AH ADC BL,78H,2. ADC 指令应用,3字节数据相减: 123456H+789ABCH=8ACF12H,MOV AL,56H MOV AH,34H MOV BL,12H ADD AL,0BCH ADC AH,9AH ADC BL,79H,MOV AX,3456H,ADD AX,9ABCH,3. INC (increment by one) 增1,指令汇编格式: INC dest 操作:将指定的操作数加1,并将结果回送到目标操作数中。 dest(dest)+1 受影响的状态标志

17、位: OF,SF,ZF,AF,PF 说明:INC 指令不影响CF。 例: INC AL INC BX INC DATA1 INC BX,3. INC (increment by one) 增1,指令汇编格式: INC dest 操作:将指定的操作数加1,并将结果回送到目标操作数中。 dest(dest)+1 受影响的状态标志位: OF,SF,ZF,AF,PF 说明:INC 指令不影响CF。 例: INC AL INC BX INC DATA1 INC BX,INC WORD PTRBX,5.5.2 减法运算指令,1. SUB (subtract)减法 2. SBB(subtract with

18、borrow)带借位加 3. DEC(decrement by 1)减1 4. NEG(negate)取补 5. CMP(compare)比较,1. SUB (subtract) 减法,指令汇编格式: SUB dest,src 操作: 从目标操作数减去源操作数,结果存入目标操作数中。 dest(dest)-(src) 受影响的状态标志位: OF,SF,ZF,AF,PF,CF 例: SUB AL,10H SUB AL,BX+10H SUB AL,AL,2. SBB (subtract with borrow) 带借位减法,指令汇编格式: SBB dest,src 操作:从目标操作数中减去源操作数

19、和CF,结果存入目标操作数中。 dest(dest)-(src)-CF 受影响的状态标志位:OF,SF,ZF,AF,PF,CF 说明: SBB 指令主要用于多精度数据减法。 例: SBB AL,0 SBB DL,CL,3. DEC(decrement by one) 减1,指令汇编格式: DEC dest 操作:将指定的操作数减1,并将结果送回到目标操作数中。 dest(dest)-1 受影响的状态标志位:OF,SF,ZF,AF,PF 说明: DEC指令不影响CF。 例: DEC BX DEC BYTE PTR BX+SI+1000H DEC SP,4. NEG (negate) 取补(取负)

20、,指令汇编格式: NEG dest 操作:从0中减去指令中给定的操作数,最后将结果送回到给定的操作数中。 dest0-(dest) 受影响的状态标志位: OF,SF,ZF,AF,PF,CF 说明: NEG 指令对于带符号的数来说是取负,即改变操作数的符号. 例: NEG AX NEG BYTE PTR BX+10,5. CMP(compare) 比较,指令汇编格式: CMP dest,src 操作: 从目标操作数中减去源操作数 (dest)-(src) 受影响的状态标志位:OF,SF,ZF,AF,PF,CF 说明: CMP 将两个操作数相减,两个操作数保持原值不变,但与SUB指令一样影响标志。

21、 例: CMP AL,BL CMP DL,10H,5.5.3 乘法运算指令,乘法指令共有两条,分别对应无符号整数的乘法和带符号整数的乘法.,1. MUL (multiply,unsigned) 无符号乘法 2. IMUL (integer multiply,signed) 带符号乘法,1. MUL 无符号乘法,指令汇编格式: MUL src 操作: 源操作数与累加器的内容相乘。如果源操作数是字节数据,就与AL中的数据相乘,乘积为字,存放在AX中。如果源操作数是字数据,就与AX中的数相乘,乘积为双字,存放在DX和AX中。 两个字节数相乘: AXAL*(src) 两个字数据相乘: DX,AXAX*

22、(src) 受影响的状态标志位: OF,CF 说明: 源操作数src不能是立即数。如果乘积的高半 部 不为零时,CF和OF被置位,否则将被清除。,1. MUL 无符号乘法,AX,src,AX,DX,例: MUL BL MUL DX MUL BYTE PTR SI+BX+1000H,2. IMUL 带符号乘法,指令汇编格式: IMUL src 操作: 将源操作数与累加器的内容相乘。如果源操作数是字节数据,就与AL中的数相乘,乘积为字,存放在AX中。如果源操作数是字数据,那么就与AX数相乘,乘积为双字,存放在DX和AX中。 两个字节数相乘: AXAL*(src) 两个字数据相乘: DX,AXAX*

23、(src) 受影响的状态标志位: OF,CF。 说明: src不能是立即数。IMUL指令视操作数为带符号的数。如果乘积的高半部不是符号位的扩展时,CF和OF被置位,否则将被清除。,5.5.4 除法运算指令,1. DIV (division,unsigned) 无符号除法 2. IDIV (division,signed) 带符号除法 3. CBW (convert byte to word)将字节转换为字 4. CWD (convert word to double word)将字转换为双字,1. DIV (division,unsigned) 无符号除法,指令汇编格式: DIV src 操作

24、: AX(或DX,AX)的内容除以src的内容。商存放在AL(字节时)或AX(字时),并将余数存放在AH(字节时)或DX(字时) 中。 字除以字节: AX/(src);AL商,AH余数 双字除以字: DX,AX/(src);AX商,DX余数 受影响的状态标志位: 不产生有效的状态标志。 说明: src不能是立即数; 如果商数超过了允许的最大值 (字节时为0FFH,字时为0FFFFH) 时就产生一个方式0 的中断,并且商和余数都不确定。,1. DIV (division,unsigned) 无符号除法,1. DIV (division,unsigned) 无符号除法举例,DIV BL DIV W

25、ORD PTR BX+DI+1000H MOV AX,1000H MOV CL,08H DIV CL,2. IDIV ( division,signed) 带符号除法,指令汇编格式: IDIV src 操作: AX(或DX,AX)的内容除以src的内容。商存放在AL( 字节时) 或AX (字时),并将余数存放在AH (字节时) 或DX (字时) 中。 字除以字节: AX/(src) ;AL商,AH余数 双字除以字: DX,AX/(src);AX商,DX余数 受影响的状态标志位: 不产生有效的状态标志。 说明: src不能是立即数; 如果商数超过了允许的最大值 (字节时为-128127,字时为-

26、3276832767)时就产生一个方式0的中断,并且商和余数都不确定。,乘除法指令的应用扩充,乘法指令能实现: BYTEBYTE=WORD WORDWORD=DORD 除法指令能实现: WORD/BYTE=BYTE DWORD/WORD=WORD 如何实现: WORDBYTE BYTE/BYTE WORD/WORD,乘除法指令的应用扩充,乘法指令能实现: BYTEBYTE=WORD WORDWORD=DORD 除法指令能实现: WORD/BYTE=BYTE DWORD/WORD=WORD 如何实现: WORDBYTE BYTE/BYTE WORD/WORD,WORD,DWORD,字节/字转换为

27、字/双字(无符号数),无符号: 字节转换为字(ALAX): MOV AH,0 字转换为双字(AXDX:AX): MOV DX,0 带符号: 字节转换为字(ALAX)正数: MOV AH,0 负数: MOV AH,0FFH 字转换为双字(AXDX:AX) 正数:MOV DX,0 负数:MOV DX,0FFFFH,3. CBW (convert byte to word) 字节转换为字,指令汇编格式: CBW 操作:将AL中第7位的值扩展到整个AH中。 如果AL为正,那么AH00H 否则 AH0FFH 受影响的状态标志位: 没有 说明: CBW 是将AL寄存器中数的符号位扩展到整个AH寄存器中。,

28、4.CWD(convert word to double word) 字转换为双字,指令汇编格式: CWD 操作: 将AX中的最高位扩展到整个DX中。 如果 AX 为正,那么 DX 0000H 否则 DX 0FFFFH 受影响的状态标志位: 没有 说明: CWD将寄存器AX的符号位扩展到整个寄存器DX中。,5.6逻辑操作指令,1. NOT (not,or form 1s complement) 取反 2. AND (and,logical conjunction) 逻辑与 3. OR (or,inclusive)逻辑或 4. XOR (exclusive or) 异或 5. TEST (tes

29、t,or logical compare) 测试,1. NOT 取反,指令汇编格式: NOT dest 操作: 将操作数的每一位求反,然后将结果回送到对应位中。 destdest 受影响的状态标志位: 没有 例: NOT AX NOT WORD PTR BX+SI+1000H,2. AND 逻辑与,指令汇编格式: AND dest,src 操作: 两个操作数进行逻辑 “与”,即如果两个操作数的对应位都为1时,结果的对应位才为1, 否则结果的对应位为0。 dest(dest)(src), CF0,OF0 受影响的状态标志位: OF,SF,ZF,AF,PF,CF 说明: AND指令可借助某个给定的

30、操作数将另一个操作数中的某些位清除(这种操作也称设置屏蔽),使某些位保持不变,这个数通常称为掩码。例如,将一个源操作数与00001111B 相“与”,可将这个源操作数的高尼伯变为0,而低尼伯保持不变。 例:AND AL,0FH AND AL,BX AND DX,DX,3. OR 逻辑或,指令汇编格式: OR dest,src 操作: 两个操作数进行逻辑“或”操作,即当两个操作数的对应位都为0时结果的对应位为0,否则结果的对应位为1,结果存入目标操作数中,CF和OF位置0。 dest(dest)(src), CF0,OF0 受影响的状态标志位: OF,SF,ZF,AF,PF,CF 说明: OR指

31、令可用来使操作数中的某些位为1,某些位保持不变。例如,用10000000B与一个 字节操作数相“或”,可使这个字节操作数的最高有效位为1。 例: OR AL,0FH OR AL,AL OR AL,BX+DI+10,4. XOR 异或,指令汇编格式: XOR dest,src 操作: 两个操作数执行逻辑“异或”操作,即当两个操作数的对应位相同时,结果的对应位为0; 否则结果的对应位为1。结果存入目标操作数中,CF和OF位置0。 dest(dest)(src), CF0,OF0 受影响的状态标志位: OF,SF,ZF,AF,PF,CF 说明:XOR指令可用来使操作数中的某些位取反,某些位不变。 例

32、: XOR AL,0FH XOR AX,AX,5. TEST 测试,指令汇编格式: TEST dest,src 操作: 将两个操作数进行逻辑“与”,根据结果设置状态标志位,但不改变两个操作数的原始值,并将CF和OF清除。 (dest)(src), CF0,OF0 受影响的状态标志位: OF,SF,ZF,AF,PF,CF 说明: TEST指令通过 “与” 的方式对两个源操作数进行比较,但不保留 “与” 的结果。,5.7 移位操作指令,移位指令共有7条,可以对字节或字操作数移位。分别为逻辑移位(SHL,SHR),算术移位(SAL, SAR),不带进位循环移位 (ROL,ROR) 和带进位循环移位(

33、RCL,RCR)。 说明: dest可以是任一通用寄存器,也可以是各种寻址方式给出的内存单元,cnt为移位次数。移位操作是将给定的目标操作数移动cnt次。cnt可以为1,也可以是CL的内容。SHL/SAL,SHR,SAR 影响CF,OF,PF,SF,ZF; ROL, ROR,RCL,RCR 仅影响CF和OF位。CF的值总是最后一次被移入的值。在移动 1位的移位中,如果源操作数的最高位 (符号位) 改变了,那么OF就被置1,否则,OF就被置0。 左移时,最高位送入CF,右移时,最低位送入CF。,5.7 移位操作指令,Rotate Shift Left Right,SHR AX,1 ROR BYT

34、E PTR BX,CL,5.8 状态标志位操作指令,8086/8088有7条状态标志位控制指令,它们可以直接和独立地对8086 CPU中的某一状态标志位进行控制,用来设置或改变状态标志位的状态。 清0 置1 取反 CF CLC STC CMC DF CLD STD IF CLI STI,5.9 简单的I/O功能调用,1. 键盘输入 调用方法: MOV AH,01H INT 21H 功能: 从键盘上接收一个字符,并在屏幕上显示出来。 入口条件: 无 出口条件: 键入字符的ASCII码在AL中。,5.9 简单的I/O功能调用,2. 显示器输出 调用方法: MOV AH,02H INT 21H 功能

35、: 在屏幕上光标处显示一个字符。 入口条件: 要显示的字符的ASCII码在DL中。 出口条件: 字符显示在屏幕上。 例: 在屏幕上显示A,用下述程序段实现: MOV DL,41H;字符A的ASCII码 MOV AH,02H INT 21H 注意,使用这个功能调用后,AL的内容将被改变。,5.9 简单的I/O功能调用,3. 程序结束退出 调用方法: MOV AH,4CH MOV AL,0 INT 21H 功能: 结束程序运行,返回操作系统。 入口条件: AL=返回码 出口条件: 无 欲使程序结束运行时,使用本功能,5.9 简单的I/O功能调用,4. 设置断点 调用方法: INT 3 功能: 停止

36、程序运行,返回DEBUG。 入口条件: 无 出口条件: 无 欲使程序结束运行而想检查运行结果时,则不应退出DEBUG,这时使用本功能。在以后上机实验时,多数是使用本功能来结束程序运行。,5.10 顺序结构程序举例例5.1,例5.1 计算y=-x。设x为三个字节长的数据,存于DATA1开始的单元。结果存入DATA2开始的单元。 计算-x,就是对x取补。 ,5.10 顺序结构程序举例例5.1,取补的概念: 一个数据取补,就是将这个数据包括符号位在内取反加1,或者用0 减去这个数据。带符号数据在机内用补码形式表示时,若原数据为负数,经取补操作后变为其绝对值,若原数据为正数,经取补操作后变为绝对值与其

37、相等的负数。 取补与补码是两个不同的概念,一个数据的补码,是用补码形式表示这个数据,当数据为正时,它的补码就是数据本身; 当数据为负时,把其原码表示形式除符号位外取反加1 或者将其绝对值进行取补所得结果为其补码。 例如,用一个字节(8位二进制位) 表示数据 已知: N1=00000101,取补后N1=11111011 N2=11111011,取补后N2=00000101,5.10 顺序结构程序举例例5.1,分析,将数据分为三种情况: (1) 最低字节不为0时,将最低字节取补,高、中字节取反; NOT,NOT,NEG 例如: 01001100 00111100 00010000 按位取反后:10

38、110011 11000011 11101111 再+1: 10110011 11000011 11110000 (2) 最低字节为0,中间字节非0,则中间节和低字节取补,高字节取反; NOT,NEG,NEG (3) 中间字节与低字节均为0 时,3个字节均取补。 NEG,NEG,NEG,5.10 顺序结构程序举例例5.1,算法: (1) 最低字节取补; (2) 进位取反; (3) 中间字节取反,取反的结果加进位; (4) 高字节取反,取反结果加进位。,5.10 顺序结构程序举例例5.1,(1) 最低字节取补; (2) 进位取反; (3) 中间字节取反,取反的结果加进位; (4) 高字节取反,取

39、反结果加进位。,低字节不为0,低字节为0,中字节不为0,中低字节为0,高字节不为0,NEG ,CF=1,CF=0,NOT+0 CF=0,NOT+0,NEG ,CF=0,CF=1,NOT+1=NEG CF=0,NOT+0,NEG ,CF=0,CF=1,NOT+1=NEG CF=1,NOT+1=NEG,5.10 顺序结构程序举例例5.1,1: ;*EXAM 5.1.1* 2: SSEGSEGMENT STACK ;堆栈段 3: STK DB 20 DUP(0) 4: SSEG ENDS 5: DSEG SEGMENT ;数据段 6: DATA1 DB 35H,26H,03H ;(032635H)

40、7: DATA2 DB 3 DUP(0) 8: DSEG ENDS 9: CSEG SEGMENT ;代码段 10: ASSUME CS:CSEG,DS:DSEG 11: ASSUME SS:SSEG 12: MBNEG: MOV AX,DSEG ;段寄存器初值 13: MOV DS,AX 14: MOV AX,SSEG 15: MOV SS,AX 16: MOV SP,SIZE STK ;设置堆栈指,5.10 顺序结构程序举例例5.1,17: MOVAL,DATA1 ;读入数据低字节 18: MOVAH,DATA1+1 ;读入数据中字节 19: MOVBL,DATA1+2 ;读入数据高字节

41、20: NEGAL ;取补低字节 21: CMC;进位取反 22: NOTAH ;中字节取反 23: ADCAH,0 ;加进位 24: NOTBL ;高字节取反 25: ADCBL,0 ;加进位 26: MOVDATA2,AL ;保存结果 27: MOVDATA2+1,AH 28: MOVDATA2+2,BL 29: MOVAX,4C00H 30: INT21H 31: CSEGENDS 32: ENDMBNEG,5.10 顺序结构程序举例例5.1,17: MOVAL,DATA1 ;读入数据低字节 18: MOVAH,DATA1+1 ;读入数据中字节 19: MOVBL,DATA1+2 ;读入

42、数据高字节 20: NEGAL ;取补低字节 21: CMC;进位取反 22: NOTAH ;中字节取反 23: ADCAH,0 ;加进位 24: NOTBL ;高字节取反 25: ADCBL,0 ;加进位 26: MOVDATA2,AL ;保存结果 27: MOVDATA2+1,AH 28: MOVDATA2+2,BL 29: MOVAX,4C00H 30: INT21H 31: CSEGENDS 32: ENDMBNEG,MOVAX,WORD PTR DATA1,MOVWORD PTR DATA2,AX,5.10 顺序结构程序举例例5.1,17: LEASI,DATA1;取原数据首址 18

43、: LEADI,DATA2;取存放结果首址 19: MOVAX,SI ;读入数据中低字节 20: NEGAX 21: CMC 22: INCSI;地址指针增量 23: INCSI 24: MOVBL,SI;读入数据高字节 25: NOTBL 26: ADCBL,0 27: MOVDI,AX ;存放结果中低字节 28: INCDI 29: INCDI 30: MOVDI,BL ;存放结果高字节 31: MOVAX,4C00H 33: INT21H 33: CSEGENDS 34: ENDMBNEG,使用寄存器间接寻址方式,ADD SI,2,?,ADD DI,2,5.10 顺序结构程序举例例5.1

44、,17: LEASI,DATA1;取原数据首址 18: LEADI,DATA2;取存放结果首址 19: MOVAX,SI ;读入数据中低字节 20: NEGAX 21: CMC 22: INCSI 23: INCSI 24: MOVBL,SI;读入数据高字节 25: NOTBL 26: ADCBL,0 27: MOVDI,AX ;存放结果中低字节 28: INCDI 29: INCDI 30: MOVDI,BL ;存放结果高字节 31: MOVAX,4C00H 33: INT21H 33: CSEGENDS 34: ENDMBNEG,MOV BL,SI+2,MOV DI+2,BL,使用变址寻址

45、方式,5.10 顺序结构程序举例例5.1,17: LEASI,DATA1;取原数据首址 18: LEADI,DATA2;取存放结果首址 19: MOVAX,SI ;读入数据中低字节 20: NEGAX 21: CMC 24: MOVBL,SI+2;读入数据高字节 25: NOTBL 26: ADCBL,0 27: MOVDI,AX ;存放结果中低字节 30: MOVDI+2,BL ;存放结果高字节 31: MOVAX,4C00H 33: INT21H 33: CSEGENDS 34: ENDMBNEG,使用变址寻址方式(DI=SI+3),MOV SI+3,AX MOV SI+5,BL,5.10

46、 顺序结构程序举例例5.1,换个算法(0-X),17: LEASI,DATA1;取原数据首址 18: MOVAX,0 ;AX清0 19: SUB AX,SI 20: MOV SI+3,AX 21: MOVBL,0;读入数据高字节 22: SBBBL,SI+2 23: MOVSI+5,BL ;存放结果高字节 24: MOVAX,4C00H 25: INT21H 26: CSEGENDS 27: ENDMBNEG,XOR AX,AX,XOR BL,BL,5.10 顺序结构程序举例例5.1,换个算法(0-X),17: LEASI,DATA1;取原数据首址 18: MOVAX,0 ;AX清0 19:

47、SUB AX,SI 20: MOV SI+3,AX 21: MOVBL,0;读入数据高字节 22: SBBBL,SI+2 23: MOVSI+5,BL ;存放结果高字节 24: MOVAX,4C00H 25: INT21H 26: CSEGENDS 27: ENDMBNEG,XOR AX,AX,XOR BL,BL,3BYTE, 4T 2BYTE,3T,2BYTE, 4T 2BYTE,3T,5.10 顺序结构程序举例例5.1,17: MOVAX,WORD PTR DATA1 19: SUB WORD PTR DATA2,AX 20: MOV AL,DATA1+2 21: SBBDATA2+2,A

48、L 24: MOVAX,4C00H 25: INT21H 26: CSEGENDS 27: ENDMBNEG,换个算法(0-X, 利用结果单元已经是0),5.10 顺序结构程序举例例5.2,例5.2 设内存DATA单元存放一个无符号字节数据, 编制程序将其拆成两位十六进制数, 并存入HEX和HEX+1单元的低4位,HEX存放高位十六进制数, HEX+1单元存放低位十六进制数。,5.10 顺序结构程序举例例5.2,1: ;*EXAM 5.2* 2: SSEGSEGMENT STACK 3: STKDB 20 DUP(0) 4: SSEGENDS 5: DSEGSEGMENT 6: DATADB0

49、B5H 7: HEXDB0,0 8: DSEGENDS 9: CSEGSEGMENT 10: ASSUME CS:CSEG,DS:DSEG 11: ASSUME SS:SSEG 12:DISC: MOV AX,DSEG 13: MOV DS,AX 14: MOV AX,SSEG 15: MOV SS,AX 16: MOV SP,LENGTH STK,17: MOV AL,DATA ;取数据 18: MOV AH,AL ;保存副本 19: AND AL,0F0H ;截取高4位 20: MOV CL,04 21: SHR AL,CL ;移至低4位 22: MOV HEX,AL 23: AND AH

50、,0FH ;截取低4位 24: MOV HEX+1,AH 25: MOV AX,4C00H 26: INT 21H 27: CSEG ENDS 28: END DISC,5.10 顺序结构程序举例例5.3,例5.3 设HEX,HEX+1 单元的低4位分别存放一位十六进制数,编制程序将其装配在一个字节中并存入DATA单元。HEX单元中数据做为高位部分。,5.10 顺序结构程序举例例5.3,1: ;*EXAM 5.3* 2: SSEG SEGMENT STACK 3: STK DB 20 DUP(0) 4: SSEG ENDS 5: DSEG SEGMENT 6: HEX DB 0AH,06H 7

51、: DATA DB 0 8: DSEG ENDS 9: CSEG SEGMENT 10: ASSUME CS:CSEG,DS:DESG 11: ASSUME SS:SSEG 12: PACK: MOV AX,DSEG 13: MOV DS,AX 14: MOV AX,SSEG 15: MOV SS,AX 16: MOV SP,SIZE STK,17: MOVAL,HEX ;取数据高序位 18: MOVCL,04 19: SHLAL,CL ;左移4位 20: ORAL,HEX+1 ;与低4位或 21: MOVDATA,AL ;保存结果 22: MOVAX,4C00H 23: INT21H 24:

52、 CSEG ENDS 25: ENDPACK,5.10 顺序结构程序举例例5.4,例5.4 计算Y=5X+8,设X为无符号字节数据,且在ARGX单元存放。计算结果,存入RLTY单元。,5.10 顺序结构程序举例例5.4,1: ;*EXAM 5.4* 2: SSEG SEGMENTSTACK 3: STK DB20 DUP(0) 4: SSEG ENDS 5: DSEG SEGMENT 6: ARGX DB15 7: RLTY DW0 8: DSEG ENDS 9: CSEG SEGMENT 10: ASSUMECS:CSEG,DS:DSEG 11: ASSUMESS:SSEG 12:CALCU

53、:MOVAX,DSEG 13: MOVDS,AX 14: MOVAX,SSEG 15: MOVSS,AX 16: MOVSP,LENGTH STK,17: MOVAL,ARGX ;取原始数 18: MOVBL,05 19: MULBL ;计算5x 20: MOVBX,08 21: ADDAX,BX ;再加上8 22: MOVRLTY,AX ;保存结果 23: MOVAX,4C00H 24: INT21H 25:CSEG ENDS 26: ENDCALCU,XOR AH,AH MOV BX,AX SHL AX,1 SHL AX,1 ADD AX,BX,4, 7077,3 2 2 2 3,5.10

54、 顺序结构程序举例例5.5,例5.5 用查表的方法将HEX单元中低4位十六进制数转换为对应的ASCII码,并显示出来。,09: +30H AF: +37H,5.10 顺序结构程序举例例5.5,1: ;*EXAM 5.5.1* 2: SSEG SEGMENTSTACK 3: STK DB20 DUP (0) 4: SSEG ENDS 5: DSEG SEGMENT 6: HATAB DB30H,31H,32H,33H,34H 7: DB35H,36H,37H,38H,39H 8: DB41H,42H,43H,44H,45H,46H 9: HEX DB0CH 11: DSEG ENDS 12: C

55、SEG SEGMENT 13: ASSUMECS:CSEG,DS:DSEG 14: ASSUMEES:DSEG,SS:SSEG 15: HTOA: MOVAX,DSEG 16: MOVDS,AX 17: MOVAX,SSEG 18: MOVSS,AX 19: MOVSP,SIZE STK ,5.10 顺序结构程序举例例5.5,1: ;*EXAM 5.5.1* 2: SSEG SEGMENTSTACK 3: STK DB20 DUP (0) 4: SSEG ENDS 5: DSEG SEGMENT 6: HATAB DB30H,31H,32H,33H,34H 7: DB35H,36H,37H,3

56、8H,39H 8: DB41H,42H,43H,44H,45H,46H 9: HEX DB0CH 11: DSEG ENDS 12: CSEG SEGMENT 13: ASSUMECS:CSEG,DS:DSEG 14: ASSUMEES:DSEG,SS:SSEG 15: HTOA: MOVAX,DSEG 16: MOVDS,AX 17: MOVAX,SSEG 18: MOVSS,AX 19: MOVSP,SIZE STK ,HATAB DB 012345678 DB 9ABCDEF,5.10 顺序结构程序举例例5.5,20: MOVAL,HEX 21: LEABX,HATAB 22: XLAT

57、 23: MOVDL,AL 24: MOVAH,02 25: INT21H 26: MOVAX,4C00H 27: INT21H 28:CSEG ENDS 29: ENDHTOA,几个段合一起,1: ;*EXAM 5.5.2* 2: PROGSEGMENT 3: STKDB20 DUP(0) 4: HATABDB30H,31H,32H,33H,34H,35H,36H,37H 5: DB38H,39H,41H,42H,43H,44H,45H,46H 6: HEXDB0CH 8: ASSUMECS:PROG,DS:PROG 9: ASSUMESS:PROG 10: HTOA:MOVAX,PROG 11: MOVDS,AX 13: MOVSS,AX 14: MOVSP,SIZE STK 15: MOVAL,HEX 16: LEABX,HATAB 17: XLAT 18: MOVDL,AL 19: MOVAH,02 20: INT21H 21: MOVAX,4C00H 22: INT21H 23: PROGENDS 24: ENDHTOA,

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!