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

2019-08-02 00:23

解:

0001?101001100001010100111001111100101010000000100[1234H][4AE0H] [0C754H]AF=0,SF=1,ZF=0,CF=1,OF=0,PF=0

1001?001000100000010100101100111101011000000000000[9090H][4AE0H] [45B0H]AF=0,SF=0,ZF=0,CF=0,OF=1,PF=0

2.13 假设BX=00E3H,字变量VALUE中存放的内容为79H,确定下列各条指令单独执行后的结果。 题号 指令 BX寄存器的内容 简单解释 009AH 0061H 00FBH 001CH 0000H 00E3H 0000 0000 1110 0011 XOR 0000 0000 0111 1001 0000 0000 1110 0011 AND 0000 0000 0111 1001 0000 0000 1110 0011 OR 0000 0000 0111 1001 0000 0000 1110 0011 XOR 0000 0000 1111 1111 TEST指令只影响标志位,不影响结果 (1) (2) (3) (4) (5) (6) XOR BX,VALUE AND BX,VALUE OR BX,VALUE XOR BX,0FFH AND BX,0 TEST BX,01H (1) XOR OSZAPC:0XXUX0 SF=0; ZF=0; PF=1 (2) AND OSZAPC:0XXUX0 SF=0; ZF=0; PF=0 (3) OR OSZAPC:0XXUX0 SF=0; ZF=0; PF=0 (4) XOR OSZAPC:0XXUX0 SF=0; ZF=0; PF=0 (5) AND OSZAPC:0XXUX0 SF=0; ZF=1; PF=1 (6) TEST OSZAPC:0XXUX0 SF=0; ZF=0; PF=0

2.14 试写出执行下列指令序列后BX寄存器的内容。执行前BX=6D16H。 MOV CL, 7 SHR BX, CL 解:

BX=6D16H= 0110 1101 0001 0110B 执行后:0000 0000 1101 1010B = 00DAH

2.15 假定DX=00B9H,CL=3,CF=1,确定下列各条指令单独执行后DX中的值。 题号 指令 (1) (2) (3)

DX寄存器的内容 简单解释 005CH 00B9H = 0000 0000 1011 1001B逻辑右移 00B9H = 0000 0000 1011 1001B算术右移 00B9H = 0000 0000 1011 1001B逻辑左移 6

SHR DX,1 SAR DX,CL 0017H SHL DX,CL 05C8H (4) (5) (6) (7) (8) (9) SHL DL,1 0072H B9H = 1011 1001B 逻辑左移 00B9H = 0000 0000 1011 1001B 循环右移 B9H = 1011 1001B 循环左移 DH = 0 算术左移 00B9H = 0000 0000 1011 1001B 带进位循环左移 B9H = 1011 1001B 带进位循环右移 ROR DX,CL 2017H ROL DL,CL 00CDH SAL DH,1 00B9H RCL DX,CL 05CCH RCR DL,1 00DCH

第3章 宏汇编语言程序设计

3.1 对于下面的数据定义,各条指令单独执行后,有关寄存器的内容是什么? FLDB DB ?

TABLEA DW 20 DUP(?) TABLEB DB 'ABCD'

(1) MOV AX, TYPE FLDB ; AX = 01H;字节类型 (2) MOV AX, TYPE TABLEA ; AX = 02H;字类型

(3) MOV CX, LENGTH TABLEA ; CX = 14H;DUP定义的变量,分配的单元数 (4) MOV DX, SIZE TABLEA ; DX = 28H;SIZE = LENGTH * TYPE

(5) MOV CX, LENGTH TABLEB ; CX = 01H;非DUP定义的变量,LENGTH=1 3.2 试写出完成下列操作的伪指令语句:

(1) 将56H, 78, B3H, 100存放在定义为字节变量ARRAY的存储单元中。 ARRAY DB 56H, 78, 0B3H, 100

(2) 将字数据2965H, 45H, 2965, A6H存放在定义为字变量DATA的存储单元中。 DATA DW 2965H, 45H, 2965, 0A6H

(3) 将字节数据56H, C6H, 78H, 12H存放在字变量ALPHA的存储单元中,并且不改变数据按字节存储的次序。

ALPHA DW 0C656H, 1278H

(4) 在BETA为首址的存储单元中连续存放字节数据,2个23,5个'A',10个(1, 2),20个空单元。

BETA DB 2 DUP ( 23 ), 5 DUP ( 'A' ), 10 DUP (1, 2), 20 DUP ( ? )

(5) 在STRING为首址的存储单元中存放字符串'THIS IS A EXAMPE'。 STRING DB 'THIS IS A EXAMPE' (6) 用符号COUNT替代100。

COUNT EQU 100 ( 或COUNT = 100 )

3.3 画图表示下列语句中数据在存储器中的存储情况。

(1) BYTE_VAR DB 'ABCD', 76, 57H, 3 DUP ( ? ), 2 DUP (1, 3) (2) WORD_VAR DW 5 DUP (0, 1), ?, 'AB', 'CD', 7965。 (1) 从左到右、从上到下为地址增大的方向。

7

41H 42 H 43 H 44 H 4CH 57 H ? ? ? 01 H 03 H 01 H 03 H (2) 从左到右、从上到下为地址增大的方向。 00 00 01 42 41 44 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 ? ? 43 1D 1F 3.4设置一个数据段DATA_SEG,其中连续存放下列的8个变量,用段定义语句和变量定义语句写出数据段:

(1) DATA1为字符串变量: 'DATA SEGMENT' (2) DATA2为十进制数字字节变量: 72, 65, -10 (3) DATA3 为十六进制数字字节变量: 109, 98, 21, 40 (4) DATA4为10个零的字节变量

(5) DATA5为数字的ASCII字符字节变量: 12345 (6) DATA6为十进制数的字变量: 7, 9, 298, 1967 (7) DATA7为十六进制数的字变量: 785, 13475

(8) DATA8为本段中字变量和字节变量之间的字节单元数之差。 解:

DATA SEGMENT

DATA1 DB 'DATA SEGMENT' DATA2 DB 72, 65, -10

DATA3 DB 6DH, 62H, 15H, 28H DATA4 DB 10 DUP (0) DATA5 DB '12345'

DATA6 DW 7, 9, 298, 1967 DATA7 DW 0311H, 34A3H

DATA8 DB $ - DATA6 - (DATA6 - DATA1) DATA ENDS

3.5假设程序中的变量定义如下: BUF1 DB 100 DUP ('A') BUF2 DW 1275H, 567, 0C5H BUF3 DB 20 DUP (?) BUF4 DB 7, 4, 6, 9, 8

(1) 用一条指令将BUF1的偏移地址送入BX。 MOV BX, OFFSET BUF1或 LEA BX, BUF1 (2) 将BUF2的第三字节数据送入CL。 MOV CL, BUF2+2

(3) 将A6H送入BUF3的第十个字节单元中。 MOV BUF3+9, 0A6H

(4) 用伪指令写出BUF1和BUF2二者的总长度(字节数) COUNT EQU BUF3 - BUF1

8

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

9

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

10


微机原理黄冰版--作业答案(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:九连环活动教学设计

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: