汇编语言程序设计钱晓捷课后答案Word下载.docx
- 文档编号:18765171
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:8
- 大小:18.83KB
汇编语言程序设计钱晓捷课后答案Word下载.docx
《汇编语言程序设计钱晓捷课后答案Word下载.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计钱晓捷课后答案Word下载.docx(8页珍藏版)》请在冰豆网上搜索。
AL=00h01001
AL=0ffh00101
2.7W=X+Y+24-Z
2.8
(1)ADDDX,BX
(2)ADDAL,[BX+SI]
(3)ADD[BX+0B2H],CX
(4)ADDWORDPTR[0520H],3412H
(5)ADDAL,0A0H
2.9;
为了避免与操作数地址混淆,将题中X,Y,Z,V字操作数改为A,B,C,D
movax,X;
ax=A
imulY;
dx,ax=A*B(将操作数看作符号数,以下同)
movcx,ax
movbx,dx;
bx,axDI,转到above执行
cmpdx,di
jaabove;
=jnbeabove
(2)若AX>
SI,转到greater执行
cmpax,si
jggreater;
=jnlegreater
(3)若CX=0,转到zero执行
cmpcx,0jcxzzero
jzzero
(4)若AX-SI产生溢出,转到overflow执行;
cmpax,di
jooverflow
(5)若SI≤AX,转到less_eq执行;
cmpsi,ax
jleless_eq
jgeless_eq
(6)若DI≤DX,转到below_eq执行。
cmpdi,dx
jbebelow_eq
jaebelow_eq
2.25;
答:
将首地址为array得20个字的数组求和,并将结果存入total单元中。
2.26;
(1)
movsi,0
movdl,string[si];
第1个字符送dl寄存器
movsi,5
movdh,string[si];
第6个字符送dh寄存器
(2)
xorsi,si;
si清零
moval,buffer[si];
第一字节
incsi
movah,buffer[si];
第二字节
movcl,4
shlah,cl;
BCD码移到高半字节
oral,ah;
组合成压缩BCD码
movdl,al;
存入dl寄..
第三字节
第四字节
movdh,al;
存入dh寄..
(3)
testdx,0f000h
movax,-1
jmpdone
zero:
movax,0
done:
ret
(4)
leabx,buffer1
leadx,buffer2
movcx,8;
8个字节
si=0
clc;
CF=0
(5)
movax,0b800h
movds,ax;
段地址
地址偏移量si=0
xordx,dx;
和的高字dx=0
movcx,99;
加的次数
movax,[si];
第一个数
again:
incsi;
指向下一个字单元
addax,[si];
加下一个数
jncnoc;
无进位转
incdx;
有进位dx=dx+1
noc:
deccx;
次数-1
jnzcx,again;
非0继续加
(6)
movsi,offsetstring
movcx,8000h;
32k=2^15=8000h
cmp[si],?
$?
jnznext
mov[si],20h;
if[si]=?
[si]<
--?
?
next:
loopagain
(7)
si<
--0
movcx,100;
循环次数
decarray[si]
deccx
jnzagain
(8)
xorsi,si;
coun:
cmpstring[si],?
jedone
jmpcoun
2..27;
(1)使CF=0:
clc;
andax,ax;
orax,ax
(2)使AX=0:
xorax,ax;
andax,0;
movax,0
(3)同时使AX=0和CF=0:
subax,ax
2.29;
压缩BCD码加法:
AX←AX+BX
出口参数:
AX=BCD码和
2.34;
okmsgdb…OK?
…$?
errmsgdb…Error!
Overflow!
?
…
movax,X
subax,Y
movdx,offsetokmsg
jmpnext
overflow:
movdx,errmsg
movah,9
int21h
错误:
movdx,errmsg;
错误1:
数据定义在代码中
errmsgdb…Error!
错误2:
缺少JMP指令
2.37;
;
xt237.asm
.modelsmall
.stack
.data
arraydb255
db0
array1db255dup('
$'
)
array2db0dh,0ah,'
.code
.startup
movah,0ah;
键盘输入字符串
movdx,offsetarray
movdx,offsetarray2;
回车换行
movah,09h
movbx,offsetarray1
moval,[bx]
cmpal,'
jzdone
a'
小于a和大于z的字符不是小写字母
jbnext
z'
janext
subal,20h;
在a和z之间的字符才是小写字母,转换为大写mov[bx],al;
保存到原位置
incbx
jmpagain
movdx,offsetarray1
.exit0
end
第三章(01)
3.1;
硬指令:
每个硬指令就是一个处理器指令,在CPU执行时产生相应功能;
伪指令:
伪指令并不产生处理器指令,它通常用于辅助汇编程序对源程序进行汇编。
3.2;
3.5;
⒈编辑文本编辑程序汇编语言源程序.asm
⒉汇编汇编程序目标模块文件.obj
⒊连接连接程序可执行文件.exe或.com
⒋调试调试程序应用程序
3.6;
;
xt236.asm简化段定义格式
.modelsmall;
定义程序的存储模式(小模式)
.stack;
定义堆栈段(默认1024个字节)
.data;
定义数据段
str1ab?
InputNumber:
0~9:
0dh,0ah,?
str2ab?
Error!
.cade;
定义代码段
.startup;
说明程序的起始点,建立ds,ss的内容。
movah,09h;
显示str1字符串
movdx,offsetstr1
gtekey:
movah,1;
调用BIOS判断按键功能
int16h
jzgetkey;
如zf=0,无键按下,等待
cmpal,…0?
;
有键按下,键值与…0?
比较
jberror;
如<
…0?
,出错处理
cmpal,…9?
有键按下,键值与…9?
jaerror;
如〉…9?
movah,02h;
调用DOS显示字符功能,显示该数字
movdl,al
.exit0;
终止程序执行,返回DOS
error:
出错,调用DOS功能显示str2字符串
movdx,offsetstr2
jmpgetkey;
等待按键
end;
汇编结束
3.7;
xt307.asm
stacksegment
dw512dup(?
stackends
datasegment
dataends
codesegment'
code'
assumecs:
code,ds:
data,ss:
stack
start:
movax,data
movds,ax
在a和z之间的字符才是小写字母,转换为大写
mov[bx],al;
movax,4c00h
codeends
endstart
3.9;
(1)movbyteptr[bx],1000;
1000超出了一个字节范围
(2)movbx,offsetmyword[si];
寄存器的值只有程序执行时才能确定,;
而offset是汇编过程计算偏移地址,故无法确定
可以改为leabx,myword[si]
(3)cmpmybyte1,mybyte2;
两个都是存储单元,指令不允许
(4)moval,mybyte1+mybyte2;
变量值只有执行时才确定,汇编过程不能计算
(5)subal,myword;
字节量AL与字量myword,类型不匹配(6)jnzmyword;
Jcc指令只有相对寻址方式,不支持间接寻址方式
3.10;
前者为“与”操作硬指令助记符,可汇编成机器代码。
后者为逻辑运算符,在汇编时进行“与”运算,产生具体数值。
3.11;
注:
对于逻辑运算,有关操作数可化为二进制数。
(1)moval,23hAND45hOR67h;
67h
(2)movax,1234h/16+1Oh;
133h
(3)movax,NOT(65535XOR1234h);
1234h
(4)moval,LOW1234hORHIGH5678h;
76h
(5)movax,23hSHL4;
0234h
(6)movax,1234hSHR6;
0048h
(7)moval,’a’AND(NOT(’a’-’A’));
41h
(8)moval,’H’OR00100000b;
68h
(9)movax,(76543LT32768)XOR7654h;
7654h
3.12;
假设block开始的数据块有32个字节数据:
16个正数+100(64h),16个负数-48(0doh)
分别连续分布:
blockdb16dup(100),16dup(-48);
也可以是任意字节数据,随意分布。
dplusdb32dup(?
);
为正数预留存储空间dminusdb32dup(?
为负数预留存储空间
countequ32;
字节数
3.15;
mydatasegsegment
my1bdb‘PersonalComputer’
my2bdb20
my3bdb14h;
20h
my4bdb00010100b
my5wdw20dup(?
my6cequ100;
my6c=100
my7cequ
mydatasegends
3.18;
段地址:
表示标号所在代码段的段地址;
偏移地址:
表示标号所在代码段的段内偏移地址;
类型:
引用该标号时,表示它所在同一个段――near类型,还是另外一个段――far类型。
3.19;
mydatasegment
ORGlO0h
VARWDWl234H,5678H
VARBDB3,4
AGLIN4
VARDDD12345678H
EVEN
BUFFDB10DUP(?
MESSDB’HELLO’
MOVAX,OFFSETVARB+OFFSETMESS;
AX=4+16H=1AH
MOVAX,TYFETYPEBUFF+TYPEMESS+TYPEVARD;
AX=1+1+4=06HMOVAX,SIZEVARW+SIZEBUFF+SIZEMESS;
AX=4+10+5=19=13HMOVAX,LENGTHVARW+LENGTHVARD;
AX=2+1=03H
MOVAX,LENGTHBUFF+SIZEVARW;
AX=10+4=14=0EH
MOVAX,TYPEBIGIN;
AX=FF02H(近)
MOVAX,OFFSETBEGIN;
AX=1BH
3.22;
段定义伪指令段名定位组合类别组名
.CODE_TEXTWORDPUBLIC’CODE’
.DATA_DATAWORDPUBLIC’DATA’DGROUP
.STACKSTACKPARASTACK’STACK’DGROUP
3.25;
numequ5
datalistdw-1,0,2,5,4,?
movbx,offsetdatalist
movcx,num
xorax,ax
addax,[bx]
mov[bx],ax
3.26;
stacksegmentpara‘stack’
dwordarraydb100dup(?
codesegment‘code’
code,ds:
data,es:
data,ss:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序设计 钱晓捷 课后 答案