1 / 15

P189 4.10 下面的程序是实现从键盘输入十个一位10进制数后累加。最后累加和以非压缩 BCD 码形式存放在 AH( 高位)和 AL( 低位)中。 试把程序段中所空缺的指令填上。

第四章 汇编语言程序设计. P189 4.10 下面的程序是实现从键盘输入十个一位10进制数后累加。最后累加和以非压缩 BCD 码形式存放在 AH( 高位)和 AL( 低位)中。 试把程序段中所空缺的指令填上。. XOR BX,BX LOP : MOV AH,01H INT 21H MOV AH,BH ADD AL,BL MOV BX,AX LOOP LOP. MOV CX,10. AND AL,0FH ; 纠错. AAA. 第四章 汇编语言程序设计. P189 4.11

havyn
Download Presentation

P189 4.10 下面的程序是实现从键盘输入十个一位10进制数后累加。最后累加和以非压缩 BCD 码形式存放在 AH( 高位)和 AL( 低位)中。 试把程序段中所空缺的指令填上。

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第四章 汇编语言程序设计 P189 4.10 下面的程序是实现从键盘输入十个一位10进制数后累加。最后累加和以非压缩BCD码形式存放在AH(高位)和AL(低位)中。 试把程序段中所空缺的指令填上。 XOR BX,BX LOP : MOV AH,01H INT 21H MOV AH,BH ADD AL,BL MOV BX,AX LOOP LOP MOV CX,10 AND AL,0FH ;纠错 AAA

  2. 第四章 汇编语言程序设计 P189 4.11 下面的程序段的功能是把DA1数据区的数0~9转换为ASCII码。 试完善本程序段。 DA1 DB 00H,01H,02H,03H,04H,05H DB 06H,07H,08H,09H ASCI DB 10H DUP(?) CONT=ASCI-DA1 LEA SI,DA1 LEA DI,ASCI LOP1: MOV AL,[SI] MOV [DI],AL INC SI INC DI LOOP LOP1 MOV CX,CONT OR AL,30H

  3. 第四章 汇编语言程序设计 P190 4.12 BUFF DB ‘ABD$QC%$A…………XYZ‘ CONT EQU $-BUFF …… CLD LEA DI,BUFF MOV CX,CONT MOV AL,’$’ XOR DX,DX NEXT: REPNZ SCASB ;搜索BUFF中的“$” CMP CX,0 JZ K1 INC DX ;”$”的个数加1 JMP NEXT K1: …… 上述程序段运行后,DX中的值表示的意义是什么? DX中是$出现的次数。

  4. 第四章 汇编语言程序设计 CLD ;增加指令 XCHG DI,SI XCHG DI,SI P190 4.13 设A,B是长度为10的字节数组,用串操作指令编写程序实现AB两数组的内容相互交换,试完善本程序。 DATA SEGMENT A DB 1,2,3,4,5,6,7,8,9,0AH ORG 0010H B DB 0AH,9,8,7,6,5,4,3,2,1 DATA ENDS …… LEA SI,A LEA DI,B MOV CX,10 LOP: LODSB XCHG AL,[DI] DEC DI STOSB INC DI LOOP LOP

  5. SUB1 PROC TEST AL,80H JE PLUS TEST BL,80H JNE EXITO JMP XCHANGE PLUS:TEST BL,80H JE EITO XCHANGE:XCHG AL,BL EXITO:RET SUB ENDP 试回答: (1)子程序的功能是什么? (2)如调用子程序前AL=9AH,BL=77H,那么返回主程序时AL=?BL=? 第四章 汇编语言程序设计 P191 4.14 现有一子程序: (1) 当AL < 0且BL < 0 AL,BL不变 当AL < 0且BL >0 AL,BL交换 当AL > 0且BL >0 AL,BL不变 当AL > 0且BL < 0 AL,BL交换 结论: AL,BL为相反数交换,同号则不变 (2)AL与BL为相反数相互交换, AL=77H BL=9AH

  6. 第四章 汇编语言程序设计 P192 4.19 编写一完整源程序,将BUF字节单元存放的两位BCD码,转换为2字节的ASCII码,并分别存放在ASC和ASC+1字节单元中。 DATA SEGMENT BUF DB 58H ASC DB ?,? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AL,BUF MOV CL,4 SHR AL,CL OR AL,30H MOV ASC,AL MOV AL,BUF AND AL,0FH OR AL,30H MOV ASC+1,AL MOV AH,4CH INT 21H CODE ENDS END START

  7. 第四章 汇编语言程序设计 习 题 课 P192 4.20 在A1单元开始定义了一长度为N的字符串,找出其中所有的小写字母存入到以A2开始的存贮区中。统计出小写字母的个数,存放到SL单元中。请编一完整的源程序。 数据段如下: DATA SEGMENT A1 DB ‘ASdDpKrJadldjFefASDEF’ N EQU $-A1 A2 DB N DUP (?) SL DB ? DATA ENDS

  8. 算法: a b c …… x y z 61H 62H …… 79H 7AH 小写字母 CMP AL, 'z‘ JA NEXT CMP AL, ’a’ JB NEXT MOV [DI], AL NEXT: ………… DATA SEGMENT A1 DB ‘ASdDpKrJadldjFefASDEF’ N EQU $-A1 A2 DB N DUP (?) SL DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV DX,DATA MOV DS,DX LEA SI,A1 LEA DI,A2 MOV CX,N LOP: MOV AL,[SI] CMP AL,'z' JA NEXT CMP AL,’a’ JB NEXT MOV [DI], AL INC DI INC SL NEXT: INC SI LOOP LOP MOV AH,4CH INT 21H CODE ENDS END START 汇编连接EXA31

  9. DATA SEGMENT A1 DB ‘ASdDpKrJadldjFefASDEF’ N EQU $-A1 A2 DB N DUP (?) SL DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV DX,DATA MOV DS,DX LEA SI,A1 LEA DI,A2 MOV CX,N LOP: MOV AL,[SI] CMP AL,'z' JA NEXT CMP AL,’a’ JB NEXT MOV [DI], AL INC DI INC SL NEXT: INC SI LOOP LOP MOV AH,4CH INT 21H CODE ENDS END START 简化段 .MODEL SMALL .DATA A1 DB ' ASdDpKrJadldjFefASDEF' N=$-A1 A2 DB N DUP(?) SL DB ? .CODE .STARTUP LEA SI,A1 LEA DI,A2 MOV CX,N LOP: MOV AL,[SI] INC SI CMP AL,'z' JA NEXT CMP AL,’a’ JB NEXT MOV [DI],AL INC DI INC SL NEXT: LOOP LOP .EXIT END

  10. 第四章 汇编语言程序设计 习 题 课 P192 4.21 设在DAT单元存放一个-9~+9的字节数据,在SQRTAB的数据区中存放0~9平方值,请用直接查表方法编写一个子程序,在SQRTAB中查找出DAT单元中数据对应的平方值送SQR单元。并写出主程序的调用方式。 数据段如下: DATA SEGMENT DAT DB -8 SQRTAB DB 0,1,4,9,16,25,36,49,64,81 SQR DB ? DATA ENDS

  11. SQRP AL>=0? MAIN NEG AL >=0 表:BX=SQRTAB <0 查表 表:AL=DAT 返回 CALL SQRP 保存到SQR 结束 第四章 汇编语言程序设计 DATA SEGMENT DAT DB -8 SQRTAB DB 0,1,4,9,16,25,36,49,64,81 SQR DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA MAIN PROC START: MOV AX,DATA MOV DS,AX LEA BX,SQRTAB MOV AL,DAT CALL SQRP MOV SQR,AL MAIN ENDP MOV AH,4CH INT 21H SQRP PROC CMP AL,0 JGE NEXT NEG AL NEXT: XLAT RET SQRP ENDP CODE ENDS END START

  12. P192 4.21简化段伪指令 .MODEL SMALL .DATA DAT DB 4 SQRTAB DB 0,1,4,9,16,25,36,49,64,81 SQR DB ? .CODE .STARTUP MAIN PROC LEA BX,SQRTAB MOV AL,DAT CALL SQRP MOV SQR,AL MAIN ENDP .EXIT SQRP PROC CMP AL,0 JGE NEXT NEG AL NEXT: XLAT RET SQRP ENDP END

  13. 开始 算法: DL=STATUS,SI=0,CX=3 DL逻辑右移两位 CF=1? N y INC SI CX=0? LEA BX,ROUT SHL SI,1 JMP [BX+SI] 第四章 汇编语言程序设计 P192 4.22 编写能完成下列要求的程序:测试字节数据STATUS,若其中位1、3、5有一位是“1”,程序转至ROUT1,若有二位是“1”,程序转至ROUT2,若三位都是“1”,程序转至ROUT3;若这三位没有一位是“1”,程序转至ROUT4。 DATA SEGMENT STATUS DB 11001010B ROUT DW ROUT4,ROUT1 DW ROUT2,ROUT3 DATA ENDS

  14. 开始 DL=STATUS,SI=0,CX=3 DL逻辑右移两位 CF=1? N y INC SI CX=0? LEA BX,ROUT SAL SI,1 JMP [BX+SI] 第四章 汇编语言程序设计 DATA SEGMENT STATUS DB 1100 1010B ROUT DW ROUT4 ,ROUT1, ROUT2, ROUT3 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV DX, DATA MOV DS,DX MOV SI,0 MOV CX,3 MOV DL,STATUS NEXT: SHR DL,1 SHR DL,1 JNC CF1 INC SI CF1: LOOP NEXT LEA BX,ROUT SAL SI,1 JMP [BX+SI] EXIT: MOV AH,4CH INT 21H ROUT1: MOV AL,1 JMP EXIT ROUT2: MOV AL,2 JMP EXIT ROUT3: MOV AL,3 JMP EXIT ROUT4: MOV AL,4 JMP EXIT CODE ENDS END START 汇编连接EXA32

  15. 课后作业: • P192 4.20 4.23 4.22

More Related