第四章答案

  • 格式:doc
  • 大小:43.50 KB
  • 文档页数:6

第四章答案
1。

指令下列指令的错误
(1)MOV AH,BX 源操作数与目的操作数长度不相同~
(2)MOV [BX],[SI] 这是两个内存单元在传递数据,而这在汇编语言中是不允许的~~~ (3) MOV AX,[SI][DI] 不能用两个变址连用,其中一个应为基址~
(4)MOV MYDA T[BX][SI],ES:AX 同(2)
(5)MOV BYTE PTR[BX],1000 必须有一个为寄存器
(6)MOV BX,OFFSET MYDA T[SI] OFFSET 不能与复杂操作数相连~
(7)MOV CS,AX 不能对CS赋值~
(8)MOV ECX,AX 操作数类型不同~
2。

(1)合法(2)非法(3)非法(4)非法
3。

(1)非法,操作数类型不同
(2)合法
(3)非法,不允许两个内存单元直接传递数据,你把人家CPU放哪了?~~~呵~
(4)合法~
(5)合法~
(6)合法
(7)非法~,必须有一个寄存器~~把CPU放哪了?~~
(8)非法,两个内存单元地址相加没有意义~
(9)合法
(10)非法,同(3)
4。

(1)两内存单元传递数据
(2)操作数类型不同
(3)跳转指令只能跳转到符号地址
(4)转移指令后不能为变量,只能为标号
(5)格式不对,应为NEAR PTR 。

5。

图,就不画了~~
6。

(1)DW 5150H
(2)MOV AX,5150H
MOV ADDRESS ,AX
等,写出几个就可以~~
7。

DA TASG SEGMENT
FLD1B DB 'personal computer'
FLD2B DB 10 DUP (32)
FLD3B DB 20H
FLD4B DB 01011001B
FLD5B DB '32654'
FLD6B DB 10 DUP (0)
FLD7B DB 'PART1',DUP 20 (?),'PART2',DUP 50 (?),'PART3',DUP 14 (?) FLD1W DW 0FFF0H
FLD2W DW 01011001B
FLD3W DW FLD7B
FLD4W DW 5,6,7,8,9
FLD5W DW 5 DUP (0)
FLD6W DW (FLD6W-FLD1W)-(FLD7B-FLD1B)
8。

PLENTH 的值为22,GE表示该数据段的长度~
9。

L的值为7
10。

(1)MOV AX,OFFSET LNAME
(2)MOV SI,WORD PTR CODE_LIST
(3)CODE_LENGHT EQU $-CODE_LIST 11。

代码如下:
DA TA_SEG SEGMENT
DB 5
DA TA_LIST DW 0FFFFH,0,2,5,4, 5 DUP (?)
DA TA_SEG ENDS
CODE_SEG SEGMENT
ASSUME CS:CODE_SEG,DS:DA TA_SEG
MOV AX,5
MOV MAX,AX
MOV AX,0FFFFH
MOV MIN,AX
CODE_SEG ENDS
12。

(1)10025
(2)19
(3)2548
(4)3
(5)103
(6)0FFFFH
(7)1
(8)3
13。

分别汇编成为:
MOV AX,0AH
MOV BL,0AH
MOV CL,1
14。

(1)(AX)=1 (2)(AX)=2 (3)(CX)=14H (4)(DX)=32H (5)(CX)=1]
15。

(1)操作符错误改为:DA TA_SEG SEGMENT
(2)缺少段名在前面加个段名
(3)引用应该从;开始把那个“/”改成“;”
(4)结构混乱改为:
MAIN_PROC PROC FAR。

MAIN_PROC ENDP
END
16。

程序框架如下:
DA TA_SEG SEGMENT ;定義數據段
ORG 0E000H ;讓下一字節地址為0E000H
FIRST_TYPE EQU THIS WORD ;建立一個與下一存儲單元有相同段地址和偏移地址的操作數
DA TA_GROUP DB 100 DUP(?) ;給DATA_GROUP 分配100個字節的空間
DA TA_SEG ENDS ;數據段結束
STACK_SEG SEGMENT ;定義堆棧段
ALIGN 16 ;讓下一字節從小段首地址開始
STACK DB 100 DUP (?) ;為堆棧分配空間
STACK_SEG ENDS ;
CODE_SEG SEGMENT
ASSUME CS:CODE_SEG ,DS:DATA_SEG ,SS:STACK_SEG
ORG 1000H ;讓下條指令的第一個字節從1000H開始
START : MOV AX,DA TA_SEG
MOV DS,AX
MOV AX,STACK_SEG
MOV SS,AX
.......
CODE_SEG ENDS
END START ;結束~
17。

程序如下:
D_SEG SEGMENT ;数据段定义
AUGEND DD 99251
D_SEG ENDS
E_SEG SEGMENT ;附加段定义
ADDEND DD -15926
E_SEG ENDS
C_SEG SEGMENT ;代码段定义ASSUME CS:C_SEG , DS:D_SEG,ES:E_SEG
START: MOV AX,D_SEG
MOV DS,AX
MOV AX,E_SEG
MOV ES,AX
MOV EAX,DS:AUGEND
ADD EAX,ES:ADDEND
MOV DS:SUM,EAX
C_SEG ENDS
END START ;结束18。

19。

需要加上PTR伪操作的有:(2)(3)(4)。