没有合适的资源?快使用搜索试试~ 我知道了~
汇编语言程序设计答案(第二版)沈美明 温冬婵编著
5星 · 超过95%的资源 需积分: 10 9 下载量 186 浏览量
2009-04-22
22:50:16
上传
评论 1
收藏 152KB DOC 举报
温馨提示
试读
41页
参考教材:IBM-PC汇编语言程序设计答案(第二板)沈美明 温冬婵编著 清华大学出版社2001年版 是个不错的东西
资源推荐
资源详情
资源评论
参考教材:IBM-PC汇编语言程序设计(第二板)沈美明 温
冬婵编著 清华大学出版社2001年版
汇编语言程序设计(第二版)
第二章
1、 答:直接由指令指定的 I/O 端口数为 256 个。
2、答:
3、答:字节单元:(30022H) = AB H,( 30024H) = EF H
字单元: (30021H) = AB34 H,( 30022H) = CDAB H。
4、答:3017:000A 的存储单元的物理地址是 3017AH,
3015:002A 的存储单元的物理地址是 3017AH,
3010:007A 的存储单元的物理地址是 3017AH。
5、答:该程序的第一个字的物理地址是 0AAA40H。
6、答:条件标志 OF、SF、ZF、CF 的值依次分别为 0、0、0、0。
7、答:(1)AX、BX、CX、DX、AH、AL、BH、BL、CH、CL、DH、DL、
SP、BP、DI、SI(注意:学生尽量不要用 SP 参与加减运算)
(2)CX
(3)DX、AX、AH、AL
(4)CS、DS、ES、SS
(5)FLAGS
(6)IP
(7)SS、SP、BP
8、答:可以用来指示存储器地址的寄存器有 BX、SP、BP、DI、SI、IP、CS、DS、
ES、SS。
9、答:唯一正确的是 D。
第三章
1。
.(1)立即寻址 没有
Page 1 of 41
1
%(2)直接寻址 7237H
(3)使用 BX 的寄存器寻址 没有
%(4)使用 BX 的间接寻址 637DH
(5)使用 BX 的寄存器相对寻址 0D5F0H
(6)%%%%基址变址寻址 8E18H
(7)相对基址变址 004FH
2。根据下列要求,写出相应的汇编指令。
(1)ADD% DX,BX
%(2)%% ADD AL,[BX][SI]
%(3)%%ADD [BX][0B2H], CX
%(4)% MOV% AX,2A59H%%%%%%%%%%% ADD [0524H] ,AX
(5) ADD AL ,0B5H%%
3。
(1)寄存器间接寻址
%% MOV BX,OFFSET [BLOCK][0AH]
% MOV% DX% ,[BX]
(2)寄存器相对寻址
% MOV% SI,OAH
% MOV DX,[BLOCK][SI]
%
(3)基址变址寻址
MOV BX ,BLOCK
%MOV SI,OAH
MOV DX,[BX][SI]
4 现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100)=12H,(20101)=34H,(20102)=56H,
(20103)=78H,(21200)=2AH,(20201)=4CH,(21202)=B7H,(21203)=65H,试说明下列各条指令执
行完后,AX 寄存器的内容。
(1)MOV%%% AX,1200H%%%%%% 1200H
%(2)%% MOV%%% AX,BX%%%%%0100H
%%(3)% MOV%%% AX,[1200]%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%4C2AH%%%%% 注意,是字单元!!
(4)MOV%% AX,[BX]%%%% 3412H%%%同上
(5)MOV%% 1100[BX]%%%%%%% 4C2AH%%%%%
%(6)%% MOV%% AX,[BX][SI]%%%7856H%%
%(7)%% MOV% AX,1100[BX][SI]%%%%%%65B7H
%
%%5。
(1) 7CD9H%%%%(2)% 1200H%%%% (3) 6319H
6。 MOV% BX,2000H
%%%%%%%%%% LES%%%DI%,[BX]
%%%%%%%%% MOV% AX, ES:DI%
7。转向地址 OBJ 的值分别为:(1)064DH%%%% (2)0691H%% (3)05E0H%%%%%%%%%%% 注意有符号数的
符号位~~
8。( 1) MOV% AX,0ABH%%%%%立即数寻址 无物理地址
%%%%% (2)MOV%% AX,BX%%% 寄存器寻址 同上
Page 2 of 41
2
%%%%%%(3)MOV% AX,[100]%%%%直接寻址 20100H
%%%%% (4)MOV AX,VAL%%%% 直接寻址 20050H
%%%%%% (5)%% MOV AX,[BX]%%%%寄存器间接寻址 20100H
%%%%%% (6)%%% MOV% AX,ES:[BX]%%%%直接寻址 21100H
%%%%%% (7)%% MOV AX,[BP]%%%%%寄存器间接寻址 20010H
%%%%% (8)MOV AX,[SI]%%%同上 200A0H
%%%%% (9)%% MOV AX,[BX+10]%%%%寄存器相对寻址 20110H
%%%%(10)MOV AX,VAL[BX]%%%%同上 20150H
%%% (11)%% MOV AX,[BX][SI]%%%%%基址变址寻址 201A0H
%%% (12)%% MOV AX,VAL[BX][SI]%%%%相对基相变址寻址 201F0H
%9。的指令: MOV AX, [BX][0CH]%%
%%%%%%%% MOV% ZREO ,AX
%(2)%% 的指令: MOV% AX,ARRAY[BX]%%
%%%%%%%%%%%%%%% %MOV ZREO,AX
10。 MOV AX,TABLE%%%%%% 是把符号地址 TABLE 里的内容送到 AX 里,指令执行完后,
(AX)=1234H
%%%%%%LEA AX,TABLE%%%%%%% 是把符号地址 TABLE 的有效地址(这里是偏移量)送到指定寄存
器 AX 里,指令执行完后,(AX)=0032H
11。执行完指令后,(AX)=1E00H
12。 LEA AX,CSTRING%%%
%%%%%%%% MOV DL,AX
%%%%%%%% MOV DH,[AX+6]
13。这个,,图,很麻烦了,所以就不画了~~大家可以看一下课本上 P51--P53,很清楚,
看完了这道韪也会了~~~
14。LES BX,[2000]
%% MOV AX,ES:[BX]
%%%% 注意:一开始我写的是: MOV AX,ES:[8000H],后来看到题目里要求写两条指令,所以
一条就不行了,就要画蛇添足~~~
%15。 运算结果 : SF,ZF,CF,OF 各位的值(从左至右依次往下~)
(1)74D4H%%%%%%%%0%% %0%%% 0%%%0
%(2)%A5C1H%%%% %%%1%%%%0%%% 0%%% 1
%(3)%4240%H%%%%%% 0%%% 0%%% 1%%% 0
%(4) 0000%H%%%%%% 0%%% 1%%% 1%%% 0%%%%%
16。 接上表~
%(1)%5D14%%%%%%%%%0%%%%0%%%%0%%%%0
(2)%%A870%%%%%%%%%1%%% 0%%%%0%%% 1
(3)% D870%%%%%%%% 1%%%%0%%%%0%%%%0
(4) 34E4%%%%% 0%%% 0%%%%1%%%%0
17。
(1).MOV AX,Z%%%%% ;把 Z 送到 AX
%%% SUB AX,X%%%%%%%% ;Z-X
%%% ADD AX,W%%%%%% ;W+(Z-X)
%%%% MOV Z,AX%%%%% ;结果保存在 Z 中
(2).% MOV AX,R%%% ;R 送到 AX 中
Page 3 of 41
3
%%%%% ADD AX,9%%%%% ;R+9
%%%% MOV% BX,X%%%% ;X 送到 BX 中
%%%% ADD% BX,6%%%% ;X+6
%%% ADD% AX,BX%%% ;( R+9)+(X+6),结果保存在 AX 中
%% MOV% BX,W%%%% ; W 送到 BX 中
%% SUB%%% BX,AX%% ; W-(R+9)-(X+6),连续减去两个数,相当于减去这两个数的和~~
% MOV%% Z,BX%%%%% ;最终结果送到 Z 中
(3)MOV AX,W%%%%%%%%%%%%%%%%%%%%% ;把 W 送到 AX
IMUL X%%%%%%%%%%%%%%%%%%%%%%%%%%%% ;W*X%%%%% 注意:低十六位保存在 AX 里,高十六位保存在 DX 里
MOV BX,Y%%%%%%%%%%%%%%%%%%%%%% ;把 Y 送到 BX 里
ADD BX,6%%%%%%%%%%%%%%%%%%%%%%% ;Y+6
IDIV BX%%%%%%%;( W*X)/(Y+6)%%% 注意:商保存在 AX 里,余数保存在 DX 里
MOV Z,AX%%%%%%%%%%%%%%%%%%%%%%% ;把商送到 Z 中,
MOV R,DX%%%%%%%%%%%%%%%%%%%%%% ;把余数 送到 R 中
(4)MOV AX,W%%%%%%%%%%%%%%%%%%% ;把 W 送到 AX 中
SUB AX,X%%%%%%%%%%%%%%%%%%%%%%%;W-X
CWD%%%% ;把 AX 中的十六位带符号数扩展成为 32 位,低十六位保存在 AX 中,
高十六位保 ;在 DX 中
MOV BX,5%%%%%%%%%%%%%%%%%%%%% ;把 5 送到 BX 中
IDIV BX%%%%%%%%%%%%%%%%%%%%%%%%%%%;( W-X)/5%%%%%%%%被除数为 32 位,除数为 16 位 商为 16 位
IMUL Y%%%%%%%%%%%%%%%%%%%%%%%%%%% ;上一步结果再乖以 Y,积为 32 位
MOV BX,2%%%%%%%%%%%%%%%%%%%%%%%%;把 2 送到 BX 中
IMUL BX%%%%%%%%%%%%%%%%%%%%%%%%%%%% ;上一步乘法所得的积再乘以 2,各为 64 位
MOV Z,EAX%%%%%%%%%%%%%%%%%%%%% ;把结果中低 32 位放入 Z 双字单元中
MOV [Z+4],EDX%%%%%%%%%%%%%%%%%;把结果中高 32 位放入 Z+4 双字单元中
18。指令 本条指令执行完后 AX 的内容执行完后 CF,SF,ZF 的值
MOV AX,1234H%%%%%% 1234H%%%% 0%%%% 0%%%%% 0
MOV CL,4%%%%%%1234H%%%% 0 %%%% 0%%%%%%0%%
ROL AX,CL%%% 2341H%%%%%%% %% 1%%%%% 0%%%%% 0
DEC AX%%%%%2340H%%%%%%%%%%%%%1%%%% %0%%%%%% 0%%
MOV CX,4%%%%% 2340H%%%%%%%%%%1%%%%%%0%%%%%% 0%
MUL CX%%%%%8918H%%%%%%%% %%% 0%%%%%%%0%%%%%% 0
INT 20H
%程序结束后,(AX)=8918H%%%% (DX)=0000H
19。指令执行完后 AX 的内容 执行完后 CF ,SF,ZF 和 OF 的值
MOV AX,0%%%%% 0%%%%%%% 0010
DEC AX%%%%%%FFFFH%%%%%%0100
ADD AX,7FFFH%%%%7FFEH%%%%% 0000
ADD AX,2%%%% 8000H%%%%%%%% 0101
NOT AX%%%%7FFFH%%%%%%%%%% 0101%%
SUB% AX,0FFFFH%%%%%%% 8000H%%%%% 1101
ADD AX,8000H%%%%% 0000H%%%%%%% 1011
SUB%%AX,1%%%%%%%%%FFFFH%%%%%%%%1101%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
AND AX,58D1H%%%%% 58D1H%%%%%%0000
SAL AX,1%%%%% B1A2H%%%%%%% 0101
SAR AX,1%%%%%%%D8D1H%%%%%% 0100
NEG AX%%%%%%%%%272FH%%%%%%1000%
ROR AX,1%%%%%%9397H%%%%% 1001%%
Page 4 of 41
4
20。( 1)MOV AX,DATAX
%%%%%%%%% ADD DATAY,AX
(2)MOV AX,DATAX
%%%%%%%% ADD DATAY,AX
%%%%%%% MOV% AX,[DATAX+2]
%%%%%%%% ADD [DATAY+2] ,AX
(3)本组指令的作用是:BX <------[DATAX]+[DATAY]+[1](CF 的值)%带进位加法~
%(4)MOV% AX,DATAX
%%%%%%%%% MUL% DATAY%%%%%%%%%%%%% ;结果的高十六位保存在 DX 里,低十六位保存在 AX 里
% (5)MOV AX,DATAX
%%%%%%%%% MOV DX,[DATAX+2]
%%%%%%%%% MUL% DWORD DATAY%%%% ;结果的高三十二位保存在 EDX 里,低三十二位保存在
EAX 里
%%%;这里所用的 DWORD 为一属性操作符,在第四章会学到~~
%(6)MOV AX,DATAX
%%%%%%%%%%DIV%% 17H%%%%%%%;结果商保存在 AL 中,余数在 AH 中
%(7)MOV AX,DATAX
%%%%%%%%% CDW%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%DIV%%DATAY
%21。NEG DX
%%%%%%%% NEG AX
%%%%%%%% SBB DX,0
22。MOV AX,A%%%%%%%%%%%%%%%%%%%%%%%%%%%% ;把双字长数的低字放到 AX 中
MOV DX,[A+2]%%%%%%%%%%%%%%%%%%%%%% ;把双字长数的高字放到 DX 中
TEST DX,8000H%%%%%%%%%%%%%%%%%%%% ;测试双字长数的符号
JZ%% RIGHT%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ;如果是非负数,则直接保存
NEG DX%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%;如果是负数,则求补
NEG AX
SBB DX,0%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
RIGHT: MOV B ,AX
%%%%%%%%%%%%%%% MOV [B+2],DX
23。每条指令单独执行完后的结果依次为:
(1) 9AH%% (2)61H% (3)0FBH (4)1CH% (5)0% (6)0E3H
24。执行指令序列后,BX 的内容为:0DAH
25。
(1)把 53D 乘以 2 的程序:
MOV AX,35H%%%%%%%%%%%%%%%%%%%% ;53D=35H
SHL AX ,1
(2)把 53 除以 2 的程序:
MOV AX,35H
SHR AX,1
其他的同理~~
26。这段程序完成的功能是:把 DX:AX 中的双字数据左移 4 位(相当于乘以 16D)
27。各条指令单独执行后,DX 的值依次为:
Page 5 of 41
5
剩余40页未读,继续阅读
资源评论
- 介子东奔西走2014-12-19答案很好,很适合学习的人参考。
lcjiayou
- 粉丝: 4
- 资源: 13
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功