150 likes | 362 Views
第四章 汇编语言程序设计. 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
E N D
第四章 汇编语言程序设计 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 下面的程序段的功能是把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
第四章 汇编语言程序设计 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中是$出现的次数。
第四章 汇编语言程序设计 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
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
第四章 汇编语言程序设计 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
第四章 汇编语言程序设计 习 题 课 P192 4.20 在A1单元开始定义了一长度为N的字符串,找出其中所有的小写字母存入到以A2开始的存贮区中。统计出小写字母的个数,存放到SL单元中。请编一完整的源程序。 数据段如下: DATA SEGMENT A1 DB ‘ASdDpKrJadldjFefASDEF’ N EQU $-A1 A2 DB N DUP (?) SL DB ? DATA ENDS
算法: 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
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
第四章 汇编语言程序设计 习 题 课 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
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
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
开始 算法: 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
开始 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
课后作业: • P192 4.20 4.23 4.22