微型计算机原理第2版西安电子科技大学出版社第五章汇编语言程序设计课后习题答案.pdf
第五章第五章 汇编语言程序设计汇编语言程序设计 1、画图说明下列语句所分配的存储器空间及初始化的数据值。 (1) BYTE_VAR DB BYTE,12,-12H,3 DUP(0,7, 2 DUP(1,2),7) (2) WORD_VAR DW 5 DUP(0,1,2),7,-5,BY,TE,256H 答: (1) (2) BYTE_VAR 42H WORD_VAR 00H 07H 59H 00H 00H 54H 01H FBH 45H 00H FFH 0CH 02H 59H EEH 00H 42H 00H 00H 45H 07H 00H 54H 01H 01H 56H 02H 00H 02H 01H 02H 02H 00H 07H 00H 00H 00H 07H 01H 01H 00H 02H 02H 01H 00H 02H 00H 07H 00H 00H 01H 07H 00H 01H 02H 02H 00H 01H 00H 02H 00H 07H 01H 00H 02H 00H 2、假设程序中的数据定义如下: PARTNO DW ? PNAME DB 16 DUP(?) COUNT DD ? PLENTH EQU $- PARTNO 问:PLENTH 的值为多少?他表示什么意义? 答:PLENTH 的值为 22,它表示当前已分配单元空间。 3、有符号定义语句如下: BUF DB 1,2,3,123 EBUF DB 0 L EQU EBUF-BUF 问:L 的值是多少? 答:L 的值为 6; 4、假设成序中的数据定义如下: LNAME DB 30 DUP(?) ADDRESS DB 30 DUP(?) CITY DB 15 DUP(?) CODE_LIST DB 1,7,8,3,2 (1) 用一条 MOV 指令将 LNAME 的偏移地址存入 BX。 (2) 用一条指令将 CODE_LIST 的头两个字节的内容放入 SI。 (3) 写一条伪指令定义符使 CODE_LENGTH 的值等于 CODE_LIST 域的实 际长度。 答:(1) MOV BX,OFFSET LNAME (2) MOV SI,WORD PTR CODE_LIST (3) CODE_LENGTH EQU $- CODE_LIST 5、对于下面的数据定义,试说明三条 MOV 语句指令的执行结果。 TABLEA DW 10 DUP(?) TABLEB DB 10 DUP(?) TABLEC DB 1234 答: MOV AX,LENGTH TABLEA ;(AX)=000AH MOV BL,LENGTH TABLEB ;(BL)=0AH MOV CL,LENGTH TABLEC ;(CL)=01H 6、对于下面的数据定义,各条 MOV 指令单独执行后,有关寄存器的内容 是什么? PLDB DB ? TABLEA DW 20 DUP(?) TABLEB DB ABCD ;答: (1) MOV AX,TYPE PLDB ;(AX)=0001H (2) MOV AX,TYPE TABLEA ;(AX)=0002H (3) MOV CX,LENGTH TABLEA ;(CX)=0014H (4) MOV DX,SIZE TABLEA ;(DX)=0028H (5) MOV CX,LENGTH TABLEB ;(CX)=0001H 7、试说明下述指令中哪些需要加上 PTR 伪指令定义符。 BVAL DB 10H,20H WVAL DW 1000H ;答: (1) MOV AL,BVAL ; (2) MOV DL,BX ; (3) SUB BX,2 ;SUB BX,WORD PTR 2 ; SUB BYTE PTR BX,2 (4) MOV CL,WVAL ;MOV CL,BYTE PTR WVAL 8、编写一宏定义 BXCHG,将一字节的高 4 位与低 4 位交换。 答: BXCHG MACRO BT MOV AL,BT MOV CL,4 ROL AL,CL ENDM 9、已知宏定义如下: XCHG0 MACRO A,B MOV AH,A XCHG AL,B MOV A,AL ENDM OPP MACRO P1,P2,P3,P4 XCHG0 P1,P4 XCHG0 P2,P3 ENDM 展开宏调用 OPP BH,BL,CH,CL 答:展开宏调用 OPP BH,BL,CH,CL 为: MOV AH,BH XCHG AL,CL MOV BH,AL MOV AH,BL XCHG AL,CH MOV BL,AL 10、将 AX 寄存器中的 16 位数分成 4 组,每组 4 位,然后把这四组数分别 放在 AL、BL、CL 和 DL 中。 答: MOV DL,AH AND DL,0F0H MOV CL,4 SHR DL,CL PUSH AX AND AH,0FH MOV BH,AH AND AL,0F0H MOV BL,AL MOV CL,4 SHR BL,CL MOV CL,BH POP AX AND AL,0FH 11、试编写一程序,要求比较两个字符串 STRING1 和 STRING2 所含字符 是否相同,若相同则显示“MATCH” ,若不相同则显示“NOMATCH” 。 13、编写程序,将以包含有 20 个数据的数组 M 分成两个数组,正数数组 P 和负数数组 N,并分别把这两个数组中数据的个数显示出来。 20、编写程序,将字节变量 BVAR 中的压缩型 BCD 数转换为二进制数,并 存入原变量中。 23、编写程序,将字节变量 BVAR 中的无符号二进制数(0FFH)转换为 BCD 数,在屏幕上显示结果。 24、设有字无符号数 X、Y,试编制求 Z=丨 X-Y 丨的程序。 11. DATA SEGMENT Infor1 DB 'Please input string1:',0AH,0DH,'$' STR1 DB 12,0,10 DUP (0) Infor2 DB 0AH,0DH,'Please input string2:',0AH,0DH,'$' STR2 DB 12,0,10 DUP (0) Infor3 DB 0AH,0DH,'MATCH',0AH,0DH,'$' Infor4 DB 0AH,0DH,'NO MATCH',0AH,0DH,'$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX LEA SI,STR1 LEA DI,STR2 MOV DX,OFFSET Infor1 MOV AH,9 INT 21H MOV DX,OFFSET STR1 MOV AH,0AH INT 21H MOV DX,OFFSET Infor2 MOV AH,9 INT 21H MOV DX,OFFSET STR2 MOV AH,0AH INT 21H INC SI INC DI MOV AL,SI MOV AH,DI CMP AH,AL JNZ NOSAME CHARCOMPARE: INC SI INC DI MOV BH,BYTE PTRSI CMP BH,BYTE PTRDI JNZ NOSAME DEC AL JNZ CHARCOMPARE SAME: MOV DX,OFFSET Infor3 MOV AH,9 INT 21H JMP ReturnDOS NOSAME: MOV DX,OFFSET Infor4 MOV AH,9 INT 21H ReturnDOS: MOV AH,4CH INT 21H CODE ENDS END START EX511b.ASM DATA SEGMENT Infor1 DB 'Please input string1:',0AH,0DH,'$' Infor2 DB 0AH,0DH,'Please input string2:',0AH,0DH,'$' STR1 DB 12,0,10 DUP (0) STR2 DB 12,0,10 DUP (0) Infor3 DB 0AH,0DH,'MATCH',0AH,0DH,'$' Infor4 DB 0AH,0DH,'NO MATCH',0AH,0DH,'$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV ES,AX LEA SI,STR1 LEA DI,STR2 MOV DX,OFFSET Infor1 MOV AH,9 INT 21H MOV DX,OFFSET STR1 MOV AH,0AH INT 21H MOV DX,OFFSET Infor2 MOV AH,9 INT 21H MOV DX,OFFSET STR2 MOV AH,0AH INT 21H INC SI INC DI MOV AL,SI MOV AH,DI CMP AH,AL JNZ NOSAME MOV AH,0 MOV CX,AX INC SI INC DI CLD COMPARE: REPE CMPSB JNE NOSAME SAME: MOV DX,OFFSET Infor3 MOV AH,9 INT 21H JMP ReturnDOS NOSAME: MOV DX,OFFSET Infor4 MOV AH,9 INT 21H ReturnDOS: MOV AH,4CH INT 21H CODE ENDS END START EX513b DATA SEGMENT M DB 1,2,3,4,5,6,-7,-8,-9,-10,11,12,13,14,15,-16,-17,-18,-19,-20 P DB 20 DUP(0) N DB 20 DUP(0) CountP DB 0 CountN DB 0 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX mov bx,0 MOV SI,0 MOV DI,0 MOV CX,20 again: cmp Mbx,0 jl less je again inc si jmp next less: inc di next: inc bx dec cx jnz again show: mov ax,si mov ch,10 div ch mov dl,al mov bh,ah ADD DL,30H MOV AH,2 INT 21H mov dl,bh ADD DL,30H MOV AH,2 INT 21H mov dl,2ch mov ah,2 int 21h mov ax,di mov ch,10 div ch mov dl,al mov bh,ah ADD DL,30H MOV AH,2 INT 21H mov dl,bh ADD DL,30H MOV AH,2 INT 21H mov ah,4ch int 21h CODE ENDS END START EX515.ASM DATA SEGMENT INFOR0 DB 0AH,0DH,“please input a four hex number“,0AH,0DH,'$' INFOR DB 0AH,0DH,“invalid hex digital“,0AH,0DH,'$' INFOR2 DB 0AH,0DH,“convert binary is:“,0AH,0DH,'$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX LEA DX,INFOR0 MOV AH,9 INT 21H XOR BX,BX MOV CH,04 MOV CL,04 INPUT: SHL BX,CL MOV AH,01 INT 21H CMP AL,30H JB ERROR CMP AL,39H JA NEXT AND AL,0FH JMP BINARY NEXT: CMP AL,41H JAE CONTINE JMP ERROR CONTINE: CMP AL,46H JA CONTINE2 JMP PROCESS CONTINE2: CMP AL,61H JAE CONTINE3 JMP ERROR CONTINE3: CMP AL,66H JA ERROR PROCESS: AND AL,0FH ADD AL,09H BINARY: OR BL,AL DEC CH JNE INPUT LEA DX,INFOR2 MOV AH,9 INT 21H DISPN: MOV CX,16 DISP: MOV DL,0 ROL BX,01 RCL DL,01 OR DL,30H MOV AH,02 INT 21H LOOP DISP JMP Exit ERROR: LEA DX,INFOR MOV AH,9 INT 21H Exit: MOV AH,4CH INT 21H CODE ENDS END START EX520.ASM DATA SEGMENT BVAR DB 35H DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV CL,4 MOV BL,BVAR ROR BL,CL AND BL,0FH MOV AL,BL MOV CH,10 MUL CH MOV BL,BVAR AND BL,0FH ADD AL,BL MOV BVAR,AL MOV AH,4CH INT 21H CODE ENDS END START EX523.ASM DATA SEGMENT BVAR DB 0FFH RESULT DB 3 DUP(0) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX LEA BP,RESULT MOV SI,2 MOV AL,BVAR CONVERSE: MOV AH,0 MOV CH,10 DIV CH MOV BPSI,AH DEC SI JS COMPLETE JMP CONVERSE COMPLETE: INC SI CMP SI,3 JGE EXIT MOV DL,BPSI CMP SI,0 JNZ Contine CMP DL,0 JNZ Contine JMP COMPLETE Contine: ADD DL,30H NUMBER: MOV AH,2 INT 21H JMP COMPLETE EXIT: MOV AH,4CH INT 21H CODE ENDS END START EX524.ASM DATA SEGMENT X DW 45 Y DW 38 Z DW 0 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AX,X CMP AX,Y JL NEGATIVE SUB AX,Y JMP Exit NEGATIVE: MOV AX,Y SUB AX,X Exit: MOV Z,AX MOV AH,4CH INT 21H CODE ENDS END START