第1章作业
作业
教材P15 习题 1.1 (2)
1.2 (1) (2) (3) 1.5 (2) (3) 1.7 (1) (2) (3) 1.8 (2) (4) 1.9 (2) (3)
(参考答案略)
参考答案
(略)
第2章作业
作业
教材P26-27习题 2.2 2.4 2.6 2.8
参考答案
(略)
第 1 页 共 10 页
第3章作业
作业
教材P71-72习题 3.1 3.2
3.4 (2) (4) (6)+(1)(5) 3.7 3.9
补充说明:
(1)对于3.1题,当操作数是存储器操作数时,注意区分内存操作数的物理地址与存储单元的内容!
(2)对于3.2题,不仅要能够判断,如果出错,还要知道具体出错的原因。
(3)对于3.7和3.9,要能够分析出每一条指令执行完后,目的操作数中寄存器的内容是什么。
参考答案 3.1
注意题目要求:源操作数的寻址方式,并计算相应的物理地址
(1) mov ax, bx 寄存器寻址 (2) mov ax, [bx] 寄存器间接寻址 (3) mov ax, table[si] 变址寻址
物理地址= (ds)×16+(si) +table = 31804H 物理地址= (ds)×16+(bx) = 30700H
因为操作数是寄存器操作数,所以无相应的物理地址
(4) mov ax, [bp]disp 基址寻址
物理地址= (ss)×16+(bp)+disp = 41700H
(5) mov ax, [bx][di] 基址变址寻址
物理地址= (ds)×16+(bx)+(di) = 30800H
(6) mov ax, [bp][si]table 相对基址变址寻址
物理地址= (ss)×16+(bp)+(si)+table = 42504H
第 2 页 共 10 页
3.2
注意题目要求:源8086/8088微处理器 (1) sub ax, [bx+bp]
× 错误原因: 对于源操作数,没有这种寻址方式 (2) add value1,value2
× 错误原因:源操作数和目的操作数不能同时为存储器操作数 (3) rol [bx][di],3
× 错误原因:当移位次数大于1时,要先把移位次数送入cl寄存器
即:mov cl, 3
rol
[bx][di], cl
(4) not bx, dx × 错误原因:
(5) mov ds, 1000h
× 错误原因: 不能把立即数送入段寄存器
(6) mov cs, ax
× 错误原因: cs寄存器不能作为目的操作数 (7) cmp 1000h, bx
× 错误原因:目的操作数不能为立即数 (8) mov value1, cx √
(9) mov ds, es
× 错误原因:两个段寄存器之间不能直接进行传送操作 (10) push cs √
(11) push 2a00h
× 错误原因: push指令的操作数只能是16位寄存器操作数或16位存储器操作数 备注: 由于本题题目中指出针对8086/8088微处理器,故此指令用法错误。若针对386以上
第 3 页 共 10 页
not指令只能有一个操作数
微处理,则正确。 (12) in
100h, al
× 错误原因: 源操作数和目的操作数均不符合in指令的语法格式
备注:具体语法格式可参见第3章课件或教材,这里只列举四个书写正确的实例。
① in ② in
al, 50h
表示从50h端口读入一个字节数据送入al
ax, 50h 表示从50h端口读入一个字数据送入ax
③ mov dx, 100h in
al, dx
表示从100h端口读入一个字节数据送入al
④ mov dl, 100h
in
al, dx
表示从100h端口读入一个字数据送入ax
③和④即说明,当端口号超过ffh(即255)时,要先将端口号送入dx (13) lea bx, 4300h × 错误原因: (14) mov ax, [cx] × 错误原因:
用于寄存器间接寻址的寄存器只能是bx,bp,si,di之一。 立即数不存在偏移地址
3.4
ps:符合要求的指令或程序段不止一种,这里只给出一种参考。 (1) mov ax, 0 and ax,0 (2) mov cl,4
rol bl,cl
(4) and bx,0f7afH
或: and bx, 1111011110101111B 或: btr bx,4 btr bx,6 btr bx,11
注: 指令btr的用法请参照教材P69
(5) xor ax, 0100000000100000B 或 xor ax, 4020H (6) test dx,0001h jnz L1 …
L1: … ; b0位为1
test dx, 0200h jnz L2
第 4 页 共 10 页
…
L2: … ; b9位为1
或: bt dx, 0 bt dx, 9
注: 指令bt的用法请参照教材P69
3.7
(ax) = 8D00H
(cx) = 0004H
3.9
(bx) = D36AH
第4章作业
作业
教材P93-94习题 4.2 (1)(2)(3)(4) 4.3 (3) 4.4 4.7 4.8
补充说明:
(1)对于4.7,要结合题目明确理解伪指令org, $的含义和用途,能够举一反三。另外注意,对于用equ或=定义的常量是不占用内存单元的。比如这里的data1和data2。 (2)结合第4章课件中的例题掌握伪指令label和运算符ptr的用法。
参考答案 4.2
注意: 题目要求的变量的类型是字节变量还是字变量
(1)此题可以有多种写法(结合右图示理解) 定义方法一:
第 5 页 共 10 页
data1
86h 27h 23h 00h 24h 1ah
低 高
data1 db 86h, 27h, 23h, 00h, 24h, 1ah 定义方法二: data1 label byte x dw 2786h, 0023h, 1a24h 定义方法三: data1 equ this byte x dw 2786h, 0023h, 1a24h
注意:在定义方法二、三中,data1是一个符号,与x占用的是同一空间
(2)此题可以有三种定义方法(结合右图示理解) data2 30h 定义方法一: 0b4h data2 dw 0b430h, 1062h 62h 定义方法二: 10h data2 label word x db 30h, 0b4h, 62h,10h 定义方法三: data2 equ this word x db 30h, 0b4h, 62h,10h
注意:在定义方法二、三中,data2是一个符号,与x占用的是同一空间
(3)data3 db 4 dup (20h), 20, 0, 6 dup(1,2)
(4)此题可以有两种定义方法 定义方法一: data1 label word data2 db 10h, 00h, 41h, 42h 定义方法二: data1 equ this word data2 db 10h, 00h, 41h, 42h
4.3
var3
2 2 低 20h 20h 20h 高
2 2 20h 20h 20h 2 2 20h
20h 20h 第 6 页 共 10 页
低 高
4.4
d_seg segment para ‘data’ infor1 db 01111111B infor2 db ’EXAMPLE’ infor5 equ $-infor2 infor3 dw 0ffffh infor4 dw 4231h d_seg ends
注意:题目要求,如要求infor5为数值常量等
4.7
(1) var1的偏移量30h, var2的偏移量3ah (2) 符号常量cnt的值10h (3) var2+2单元的内容为2
4.8
D_SEG SEGMENT PARA STACK FLD1 DB 0,256,A FLD2 DW A400H,60H FLD3 DB THIS IS COMPUTER FLD4 DW 0,4000H,’ABCD’ D_SEG ENDP
C_SEG SEGMENT PARA ‘CODE’ ASSUME CS:C_SEG DS:D_SEG MAIN PROC FAR ... LEA SI, FLD1
S1: MOV D1, OFFSET FLD2 MOV AX, [SI] MOV [DI],4200H
第 7 页 共 10 页
...
MAIN ENDP C_SEG ENDS END S1
第5章作业
教材P107习题 5.1 5.3
补充说明:
(1)对于5.3,注意程序结束时的终止结点!
参考答案
(略)
第6章作业
作业
教材: P133-134 6.2 6.5 6.7 ps:
(1)6.2题目更正: P143最后一行 inc 改为 inc si (2)6.7提示:
利用int 21h的1号功能和循环完成字符串的输入。
第 8 页 共 10 页
参考答案(部分) 6.2
说明:
第1次运行完指令inc si时,(al) = 08H
至于cx寄存器的值,题目表述的有些不清楚。
如果是指第一次执行完inc si并且还未执行loop cx指令,则(cx)= 10 如果是指第一次执行完inc si并且还已执行loop cx指令,则(cx)= 9
6.7
参考思路:
利用堆栈“先入后出”的特性,每输入一个字符即压入堆栈,待全部输入完毕后,再一次执行弹栈操作,随即输出,从而实现字符串的逆序输出。
与该思路对应的程序实现: code segment
assume cs:code main proc far push ds mov ax,0 push ax mov cx,0 input: mov ah,1 int 21h inc cx push ax cmp al,'$' jnz input pop dx dec cx output: pop dx mov ah,2 int 21h loop output ret main endp code ends
end main
第 9 页 共 10 页
关于参考代码的其他几点说明:
(1)在8086/8088中压栈/弹栈操作只能以字数据为单位。故尽管输入的字符是在dl寄存器中,入栈时是把dx压入堆栈的。同样,弹出时,是从堆栈中弹出字数据到dx,不过程序要输出的字符只在低8位即dl寄存器中。
第 10 页 共 10 页
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库汇编语言作业汇总在线全文阅读。
相关推荐: