五六周作业参考答案及问题汇总 - 55007654

更新时间:2024-06-06 23:12:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

43. 下列变量各占多少字节? 〈1〉ALPHA DW 25H,36H 〈2〉BETA DB 4 DUP(?)

〈3〉GAMMA DD 10 DUP(1250H,12345678H) 〈4〉COUNT DB 5 DUP(4 DUP(3,2,’ABC’)) 解:〈1〉 2×2=4 〈2〉 1×4=4 〈3〉 4×10×2=80

〈4〉 1×5×4×(2+3)=100

44. 下列指令各完成什么功能?

〈1〉MOV AX,00FFH AND 122H+2233H 〈2〉MOV AL,15 GE 1111B

〈3〉MOV AX,4500H OR 0035 AND 00FFH 〈4〉MOV AH,0FFH LE 255+6/5 〈5〉OR AL,50 MOD 4+20

解:〈1〉AX = (0000 0000 1111 1111 & 0010 0011 0101 0101) = 0055H 〈2〉AL = FFH

〈3〉AX = (4500H | 0023H & 00FFH) = 4523H ――注意0035=23H 〈4〉AH = FFH

〈5〉等效为 “OR AL, 16H” 即将AL的 D4D2D1置1, 其它位不变

45. 假设程序中的数据定义如下: LNAME

DB 30 DUP(?)

CODE_LIST DB 1,7,8,3,2 ADDRESS DB 30 DUP(?)

〈1〉用一条MOV指令将LNAME的偏移地址放入BX。

〈2〉 用一条指令将CODE_LIST的头两个字节(低字节在前,高字节在后)内容放入SI。 〈3〉写一条伪指令使CODE_LENTH的值等于CODE_LIST域的实际长度。 解:〈1〉MOV BX, OFFSET LNAME 〈2〉MOV SI, WORD PTR CODE_LIST

〈3〉CODE_LENTH EQU ADDRESS – CODE_LIST ;EQU也可以写成等号。题意没有规定CODE_LENTH是符号还是变量,故还可以写成:

CODE_LENTH DB ADDRESS - CODE_LIST ;限制其数值小于256

46. 试按下列要求分别编写程序段: 〈1〉将寄存器AL中高低四位互换。

〈2〉由寄存器AX,BX组成一个32位带符号数(AX中存放高16位),试求这个数的相反

数。

〈3〉用一条指令把CX中的整数转变为奇数(如原来已是奇数,则CX不变;如原来是偶数,

则CX+1形成奇数)。 解:

(1) MOV CL,4 ROL AL,CL ; 或ROR AL,CL (2) ①若用NEG指令求相反数,则可: NEG BX ADC AX,0 ; 加上可能产生的进位CF NEG AX ; 0 –(AX+CF)=0–AX - CF

②若理解求相反数为连符号位带数值位取反再末位加1 ,则可: NOT AX NOT BX ADD BX,1 ADC AX,0 ; 这种算法最后CF和NEG的相反 (3) OR

47. 指令AND AX,1234H AND 5678H中,两个AND操作有什么区别? 解:前一个AND 是 运算指令,在执行指令时完成;AND AX,1230H

后一个 AND 是汇编运算中的逻辑运算, 在汇编时完成。1234H AND 5678H = 1230H

49. 编写一个完整的程序,要求把数据段DSEG中的双字数X和附加段ESEG中的双字数Y相加,结果存放在DSEG中的SUM中,代码段为CSEG。

解:DSEG SEGMENT X DD 12345678H ;双字 SUM DD ? ;双字 DSEG ENDS

ESEG SEGMENT Y DD 34567890H ;双字 ESEG ENDS

STACK SEGMENT STACK DB 100 DUP(?) STACK ENDS CSEG SEGMENT ASSUME CS:CSEG, DS:DSEG, ES:ESEG,SS:STACK

MOV AX, DSEG MOV DS, AX MOV AX, ESEG MOV ES, AX MOV AX,WORD PTR X ;转类型引用,一定要写WORD PTR ADD AX, WORD PTR ES:Y; 一定要写ES:,否则默认DS: MOV WORD PTR SUM, AX; 转类型存储,一定要写WORD PTR MOV AX,WORD PTR X+2 ; 地址是按字节计算,所以+2才指向高位字, ADC AX,WORD PTR ES:Y+2 ; 带低位字的进位加

CX,1

MOV WORD PTR SUM+2, AX; 最后的进位没有考虑 MOV AH,4CH INT 21H CSEG ENDS

52. 设字节变量X为带符号整数,试按下面要求编写出程序: 〈1〉如果X的绝对值大于5,将变量FX赋值为零; 〈2〉如果X的绝对值不大于5,将变量FX赋值为1-X。

解: X DB -5

FX DB ?

法 一:

MOV FX, 0; 先赋一个值0,使后面的分支简单

CMP X, 5 JG DONE; 带符号数必须用JG、JL,不能用无符号数的JA、JB CMP X, -5; 汇编语言源程序中可以直接用-5这种形式 JL DONE MOV AL, 1 SUB AL, X MOV FX, AL DONE: INT 3

法 二: MOV FX, 0 MOV AL, X; 取到AL中变换,以免破坏X。而且在AL中运算还快 AND AL, 0FFH ;区分正负数 JNS L1 NEG AL ; 负数变绝对值,正数就不能做这条指令

L1: CMP AL, 5 ; 至此X已经是绝对值,可以看成无符号数 JA DONE; 若用了JG,从概念上稍错一点 MOV AH, 1 SUB AH, X; MOV FX, AH DONE: INT 3

55. 编写程序,将AX的内容转换为相应十六进制数的ASCII码,存入首地址为MEM的四个存储单元中,低位在前,高位在后。

解:DATA SEGMENT MEM DB 4 DUP (?) DATA ENDS

STACK SEGMENT STACK DB 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACK

START: MOV AX,DATA MOV DS,AX MOV CX,4 MOV SI, 0 L1: PUSH CX MOV BX,0FH AND BX,AX OR BL,30H CMP BL,39H JBE L2 ADD BL,7 L2: MOV MEM[SI],BL INC SI MOV CL,4 SHR AX,CL POP CX LOOP L1 MOV AH,4CH INT 21H CODE ENDS END START

56. 指出下列容量的静态存储器芯片各有几条地址线和数据线?若要分别组成一个16KB的存储器系统,各需要几片?

(1) 1K×4bit (2) 256×8bit (3) 2K×8bit (4) 4096×1bit

解:地址线 数据线 片数 (16K) (8b)

(1) 10 4 32 = 16×(1K) × 2 × (4b) (2) 8 8 64 = 16×4×(256) × 1B (3) 11 8 8 = 8×(2K) × 1B

(4) 12 1 32 = 4×(4K) × 8×(1b)

常见问题:

第5次作业中,46(1)有一部分同学直接写的是 ROL AL,4 但是对于ROL指令立即数只能为1,必须借助CL 。参见教材87页

本文来源:https://www.bwwdw.com/article/m3f6.html

Top