微机原理黄冰版--作业答案

3.6 给出等值语句如下:

ALPHA EQU 100 BETA EQU 25 GAMMA EQU 2 求下列表达式的值:

(1) ALPHA * 100 + BETA ; 10025D = 2729H

(2) ALPHA MOD GAMMA + BETA ; 100 MOD 2 + 25 = 25D = 0019H (3) (ALPHA + 2) * BETA - ALPHA ; (100 + 2 ) * 25 – 100 = 2450D = 0992H (4) (BETA / 3) MOD 5 ; (25 / 3) MOD 5 = 03H

(5) BETA AND 7 ; 0001 1001 AND 0000 0111 = 01H (6) GAMMA OR 3 ; 0000 0010 OR 0000 0011 = 0003H 3.7 下列语句中,在存储器中每个变量分配到多少字节? VR1 DW 9 ; 2字节

VR2 DW 4 DUP (?), 2 ; 4 * 2 + 2 = 10字节 VR3 EQU 100 ; 0字节

VR4 DD VR3 DUP (?) ; 100 * 4 = 400字节

VR5 DB 2 DUP (?, VR3 DUP (0, 1) ) ; 2 * ( 1 + 100 * 2 ) = 402字节 VR6 DB 'HOW ARE YOU?' ; 12字节

3.8 试写出一个完整的数据段DATA_SEG,首先把10个压缩的BCD码29存放在ARRAY变量字节单元中,紧接着把-25, 4, 10, 76, 3存放在ALPHA数组变量的字单元中,接着留100个空单元作为工作单元用,它定义为字节变量BUFFER。 DATA_SEG SEGMENT ARRAY DB 10 DUP ( 29H ) ALPHA DW -25, 4, 10, 76, 3 BUFFER DB 100 DUP ( ? ) DATA_SEG ENDS

3.9 将存放在字节变量BCD1中的两个十进制数的ASCII码合并为一字节压缩型BCD码,存入字节变量BCD2,试编写程序。

DATA SEGMENT BCD1 DB '34' BCD2 DB ? DATA ENDS

CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL, BCD1 MOV CL, 4 SAL AL, CL

MOV BL, BCD1+1 AND BL, 0FH OR AL, BL

MOV BCD2, AL MOV AH, 4CH INT 21H CODE ENDS END START

3.10 分析下列程序段,并说明完成什么操作。 ADDNUM DB 28H, 46H, 95H, 26H ADDSUM DB 2 DUP (?)

MOV AL, ADDNUM ; ADDNUM第1个数据送到AL ADD AL, ADDNUM + 2 ; ADDNUM第3个数据加到AL DAA ; 加法的十进制调整指令

MOV ADDSUM, AL ; ADDNUM第1、3个数据的和放到ADDSUM MOV AL, ADDNUM + 1 ; ADDNUM第2个数据送到AL ADC AL, ADDNUM + 3 ; ADDNUM第4个数据加到AL DAA ; 加法的十进制调整指令

MOV ADDSUM + 1, AL ; ADDNUM第2、4个数据的和放到ADDSUM + 1

解:

将ADDNUM的第1、3个数据相加,并将结果进行十进制调整转换为压缩型BCD码,并放到ADDSUM的第1个字节的位置;将ADDNUM的第2、4个数据相加,并将结果进行十进制调整转换为压缩型BCD码,并放到ADDSUM的第2个字节的位置。

即:4628+2695,结果调整为压缩型BCD码,结果以字变量形式放到ADDSUM单元。

3.11 写出完成下述功能的程序段: (1) 将32H存入CH中。

(2) 将CH中的内容与2AH相加。 (3) 将CH中的内容乘2。

(4) 将CH中的内容存入以BX作为相对基址寻址的数组变量NUM的第十个字节单元中(数据段)。

问:各程序段分别执行后,CH中的内容是多少? MOV CH, 32H ; (1) CH = 32H ADD CH, 2AH ; (2) CH = 5CH MOV AL, 02H ;

MUL CH ; (3) CH = 5CH, AX = 0B8H MOV [BX + NUM + 9], CH ; (4) CH = 5CH

3.12 编写程序,计算Z = ( ( W – X ) / 10 * Y )2,r为相除所得余数。其中W, X, Y均为8位有符号二进制数。

DATA SEGMENT W DB 12 X DB 24 Y DB 48

Z DW 2 DUP (?) r db ? DATA ENDS

CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX

MOV AL, W

SUB AL, X ; W - X -> AL CBW

MOV BL, 10

IDIV BL ; (W - X) / 10 -> AL MOV r, AH ; (W - X) % 10 -> r MOV BL, Y

IMUL BL ; (W - X) / 10 * Y -> AX MOV BX, AX

IMUL BX ; ((W - X) / 10 * Y)^2 -> DX, AX MOV Z, AX

MOV Z+2, DX ; ((W - X) / 10 * Y)^2 -> Z MOV AH, 4CH INT 21H CODE ENDS END START

3.13 在数组字变量ARRAY中有10个数据,将数组中的第5个字数据求补,再放回原处,画出程序流程图和编写程序。

3.14 用重复前缀串比较指令比较两个字符串,一个是在数据段的字符串变量STR1(内容为'THIS IS A DOG'),另一个是在附加段的字符串变量STR2(内容为'THIS IS A COCK')。当比较到第一个不相同的字符时停止比较,把相同部分字符串长度存入数据段的字节变量NUM中。写出分段结构的程序段,应包括段定义,伪指令和指令序列。问:相同部分字符串长度为多少?在STR1和STR2第一个不同处的偏移地址是多少?

DATA SEGMENT

STR1 DB 'THIS IS A DOG' LEN1 DB $-STR1 NUM DB ? DATA ENDS

EDATA SEGMENT

STR2 DB 'THIS IS A COCK' LEN2 DB $-STR2 EDATA ENDS

CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:EDATA START: MOV AX,DATA MOV DS,AX MOV AX,EDATA MOV ES,AX CLD ;串操作由低地址向高地址 MOV CH,0 MOV AL,LEN1 CMP AL,ES:LEN2 JB B1L2

MOV CL,ES:LEN2 JMP CMPOK B1L2: MOV CL,AL

CMPOK: LEA SI,STR1 LEA DI,ES:STR2 REPE CMPSB MOV AX,SI

DEC AL ;不同处的字节偏移地址

MOV NUM,AL ;不同处的字节偏移地址放到NUM MOV AH, 4CH INT 21H CODE ENDS END START

答:相同长度10,不同处的偏移地址10

3.15 有两个压缩型BCD码相加,被加数(6756)和加数(7321)存放在数据段的BUFFER变量的4个连续的字节存储单元中,结果(和)存放在RESUT变量的三个字单元中(考虑到有进位的情况),编制具有数据段和代码段结构的完整程序,程序中需要作必要的注释。

注:结果存放在RESUT字节变量中,三个字单元不知要求怎么用 DATA SEGMENT

BUFFER DB 67H,56H,73H,21H RESUT DB 3 DUP (?) DATA ENDS

CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL,BUFFER+1 ;第一个数据低两位->AL MOV BL,BUFFER+3 ;第二个数据低两位->BL ADD AL,BL ;低两位相加 DAA ;十进制调整 MOV DL,AL ;低两位相加结果放到DL MOV AL,BUFFER ;第一个数据高两位->AL MOV BL,BUFFER+2 ;第二个数据高两位->BL ADC AL,BL ;低两位相加 DAA ;十进制调整 MOV BL,0 JNC HCF INC BL

HCF: MOV RESUT,BL ;存放最高位 MOV RESUT+1,AL ;存放中间两位 MOV RESUT+2,DL ;存放最低两位 MOV AH, 4CH INT 21H CODE ENDS END START

3.16 将SRCBUF变量定义的80个字符串传送到DSTBUF变量定义的存储区去。当遇到0DH时,不将此字符传送到DSTBUF变量中去。试编写程序,并加以注释。

DATA SEGMENT

SRCBUF DB 'aaa',0DH,'bbb' DSTBUF DB 80 DUP (?) DATA ENDS

CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV CX,07 ;比较次数->CX MOV SI,0 ;源串指针->SI

联系客服:779662525#qq.com(#替换为@)