




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-.z.汇编语言程序设计(第二版)钱晓捷习题答案第二章〔01〕2.1〔1〕A*=1200h
〔2〕A*=0100h
〔3〕A*=4C2Ah
〔4〕A*=3412h
〔5〕A*=4C2Ah
〔6〕A*=7856h
〔7〕A*=65B7h2.2(1)
两操作数类型不匹配
(2)
IP指令指针制止用户访问
(3)
立即数不允许传给段存放器
(4)
段存放器之间不允许传送
(5)
两操作数类型不匹配
(6)
目的操作数应为[BP]
(7)
源操作数应为[B*+DI]
(8)
立即数不能作目的操作数2.3leab*,table
;获取table的首地址,B*=200H
moval,8
;传送欲转换的数字,AL=8
*lat
;转换为格雷码,AL=12H2.4mova*,8057h
pusha*
mova*,0f79h
pusha*
popb*
;b*=0f79h
pop[b*]
;DS:[0f79h]=8057h2.6AL=89h
CF
ZF
SF
OF
PF
AL=12h
1
0
0
1
1
AL=0afh
0
0
1
0
1
AL=0afh
1
0
1
0
1
AL=00h
0
1
0
0
1
AL=0ffh
0
0
1
0
1AL=00h
0
1
0
0
1
2.5堆栈是一种按"先进后出〞原则存取数据的存储区域。堆栈的两种根本操作是压栈和出栈,对应的指令是PUSH和POP。
2.7W=*+Y+24-Z2.8〔1〕ADDD*,B*
〔2〕ADDAL,[B*+SI]
〔3〕ADD[B*+0B2H],C*
〔4〕ADDWORDPTR[0520H],3412H
〔5〕ADDAL,0A0H2.9;为了防止与操作数地址混淆,将题中*,Y,Z,V字操作数改为A,B,C,D
mova*,*
;a*=A
imulY
;d*,a*=A*B
(将操作数看作符号数,以下同〕
movc*,a*
movb*,d*
;b*,a*
<--
d*,a*=A*B
mova*,Z
;a*=C
cwd
;d*,a*=C
〔扩展符号后为双字〕
addc*,a*
adcb*,d*
;b*,c*<--b*,c*+d*,a*=A*B+C
subc*,540
sbbb*,0
;b*,c*<--A*B+C-540
mova*,V
;a*=D
cwd
;d*,a*=D
〔扩展符号后为双字〕
suba*,c*
sbbd*,b*
;d*,a*=d*,a*-b*,c*=D-(A*B+C-540)
idiv*;运算结果:[D-(A*B+C-540h)]/A;a*存商,d*存余数2.10;〔1〕*chg的操作数不能是立即数〔2不能对CS直接赋值〔3〕两个操作数不能都是存储单元〔4〕堆栈的操作数不能是字节量〔5〕adc的操作数不能是段存放器〔6〕没有确定是字节还是字操作〔7〕in不支持超过FFH的直接寻址〔8〕out只能以AL/A*为源操作数
第二章(02)
2.11;指令A*的值CFOFSFZFPFMov
a*,1407h1470h-----And
a*,a*1470h00000Or
a*,a*1470h00000*or
a*,a*000011Not
a*0ffffh-----Test
a*,0f0f0ffffh00101注意:1.mov,not指令不影响标志位2.其他逻辑指令使CF=OF=0,根据结果影响其他标志位。
第2章〔03〕2.12;指令
注释
执行结果
CFOFSFZFPFmovsi,a*
si=a*
si=0008h
-
-
-
-
-shlsi,1
si=2*a*
si=0010h
0
0
0
0
0addsi,a*
si=3*a*
si=0018h
0
0
0
0
1movd*,b*
d*=b*
d*=0010h
-
-
-
-
-movcl,03h
cl=03h
-
-
-
-
-shld*,cl
d*=8*b*
d*=0080h
0
u
0
0
0subd*,b*
d*=7*b*
d*=0070h
0
0
0
0
0addd*,si
d*=7*b*+3*a*
d*=0088h
0
0
0
0
1注意:1.左移N次相当于乘于2的N次方,右左移N次相当于除乘于2的N次方。
2.移位指令根据是否移入"1〞到CF,设置CF,根据移位后的结果影响SF,ZF,PF。根据最高符号位是否改变设置OF,如改变OF=1.
3.‘u’表示无定义,‘-’表示无影响。2.13;(1)
;不考虑进位movbl,al
movcl,3
shlal,cl
addal,bl
;shlbl,1
addal,bl
;考虑进位*orah,ah
movb*,a*
movcl,3
shla*,cl
adda*,b*
;shlb*,1
adda*,b*
(2)
数字0~9的ASCII码是:30h~39h
非压缩BCD码的0~9是:00h~09h
方法一:
andal,0fh
;实现ASCII到非压缩BCD码的转换
oral,30h
;实现非压缩BCD码到ASCII的转换
方法二:
*oral,30h
;求反D5D4位,其他不变
;即高4位为3,则变为0;高4位为0,则变为3
movcl,4
again:shrd*,1
;实现逻辑右移
;采用"sard*,1”,则实现算术右移
rcra*,1
deccl
jnzagain2.14;〔1〕用sar编写2.20;8086的条件转移的转移范围:在当前指令地址的+127-----128之内。如条件转移的转移范围超出此范围,可在此范围内安排一条无条件转移,再转移到范围外的目标地址。2.21;(1)JMPB*
;转移的有效地址EA=B*=1256h
(2)JMPtABLE[B*];转移的有效地址EA=[ds:20a1h+1256h]=[232f7]=3280h
(3)JMP[B*][si]
;转移的有效地址EA=[ds:1256h+528fh]=264e5h=2450h2.22;〔1〕*ora*,1e1eh
jeequal
;A*=1e1eh〔异或后为0〕
〔2〕testal,10000001b
jnzthere
;AL的D0或D7至少有一位为1
〔3〕cmpc*,64h
there
;C*〔无符号数〕<64h2.23;movc*,0
不循环,因为一进入循环就判c*=0"如c*=0就退出循环
delay:loopdelay2.24;〔1〕假设D*>DI,转到above执行
cmpd*,di
jaabove
;=jnbeabove
〔2〕假设A*>SI,转到greater执行
cmpa*,si
jggreater
;=jnlegreater
〔3〕假设C*=0,转到zero执行
cmpc*,0
jc*zzero
jzzero
〔4〕假设A*-SI产生溢出,转到overflow执行;
cmpa*,di
jooverflow
〔5〕假设SI≤A*,转到less_eq执行;
cmpsi,a*
cmpa*,si
jleless_eq
jgeless_eq
〔6〕假设DI≤D*,转到below_eq执行。
cmpdi,d*
cmpd*,di
ebelow_eq
jaebelow_eq2.25;答:将首地址为array得20个字的数组求和,并将结果存入total单元中。2.26;(1)
movsi,0
movdl,string[si]
;第1个字符送dl存放器
movsi,5
movdh,string[si]
;第6个字符送dh存放器
(2)
*orsi,si
;si清零
moval,buffer[si]
;第一字节
incsi
movah,buffer[si]
;第二字节
movcl,4
shlah,cl
;BCD码移到高半字节
oral,ah
;组合成压缩BCD码
movdl,al
;存入dl寄..
incsi
moval,buffer[si]
;第三字节
incsi
movah,buffer[si]
;第四字节
movcl,4
shlah,cl
;BCD码移到高半字节
oral,ah
;组合成压缩BCD码
movdh,al
;存入dh寄..
(3)
testd*,0f000h
jzzero
mova*,-1
jmpdone
zero:
mova*,0
done:
ret
(4)
leab*,buffer1
lead*,buffer2
movc*,8
;8个字节
*orsi,si
;si=0
clc
;CF=0
(5)
mova*,0b800h
movds,a*
;段地址
*orsi,si
;地址偏移量si=0
*ord*,d*
;和的高字d*=0
movc*,99
;加的次数
mova*,[si]
;第一个数
again:
incsi
;指向下一个字单元
incsi
adda*,[si]
;加下一个数
jnc
noc
;无进位转
incd*
;有进位d*=d*+1
noc:
decc*
;次数-1
jnzc*,again
;非0继续加
ret
(6)
movsi,offsetstring
movc*,8000h
;32k=2^15=8000h
again:cmp[si],’$’
jnzne*t
mov[si],20h
;if[si]=’$’[si]<--’’
ne*t:
incsi
loopagain
(7)
*orsi,si
;si<--0
movc*,100
;循环次数
again:decarray[si]
decc*
jnz
again
(8)
*orsi,si
;si<--0
coun:
cmpstring[si],’$’
je
done
incsi
jmpcoun
done:ret
2..27;(1)使CF=0:
clc
;
anda*,a*
;ora*,a*
(2)使A*=0:
*ora*,a*
;
anda*,0
;mova*,0
(3)同时使A*=0和CF=0:anda*,0;*ora*,a*;suba*,a*2.29;压缩BCD码加法:A*←A*+B*
出口参数:A*=BCD码和2.24;okmsg
db‘OK’,‘$’errmsg
db‘Error!Overflow!’,‘$’
…
mova*,*
suba*,Y
jooverflow
movd*,offsetokmsg
jmpne*t
overflow:movd*,errmsg
ne*t:
movah,9
int21h
错误:
mova*,*
suba*,Y
jooverflow
movd*,offsetokmsg
okmsg
db‘OK’,‘$’
movd*,errmsg
;错误1:数据定义在代码中
movah,9
int21h
overflow:
errmsgdb‘Error!Overflow!’,‘$’
movd*,errmsg
;错误2:缺少JMP指令
movah,9
int21h2.37;;*t237.asm
.modelsmall
.stack
.data
arraydb255
db0
array1db255dup('$')
array2db0dh,0ah,'$'
.code
.startup
movah,0ah
;键盘输入字符串
movd*,offsetarray
int21h
movd*,offsetarray2;回车换行
movah,09h
int21h
movb*,offsetarray1
again:moval,[b*]
cmpal,'$'
jzdone
cmpal,'a'
;小于a和大于z的字符不是小写字母
ne*t
cmpal,'z'
jane*t
subal,20h
;在a和z之间的字符才是小写字母,转换为大写
mov[b*],al
;保存到原位置
ne*t:incb*
jmpagain
done:movd*,offsetarray1
movah,09h
int21h
.e*it0
end第三章(01)3.1;硬指令:每个硬指令就是一个处理器指令,在CPU执行时产生相应功能;伪指令:伪指令并不产生处理器指令,它通常用于辅助汇编程序对源程序进展汇编。3.2;3.5;⒈编辑文本编辑程序汇编语言源程序.asm
⒉汇编汇编程序目标模块文件.obj
⒊连接连接程序可执行文件.e*e或.
⒋调试调试程序应用程序3.6;;*t236.asm
简化段定义格式
.modelsmall;定义程序的存储模式〔小模式〕
.stack
;定义堆栈段〔默认1024个字节〕
.data
;定义数据段
str1
ab’InputNumber:0~9:’,0dh,0ah,’$’
str2
ab’Error!’,0dh,0ah,’$’
.cade
;定义代码段
.startup
;说明程序的起始点,建立ds,ss的内容。
movah,09h
;显示str1字符串
movd*,offsetstr1
int21h
gtekey:movah,1
;调用BIOS判断按键功能
int16h
jz
getkey
;如zf=0,无键按下,等待
cmp
al,‘0’;有键按下,键值与‘0’比拟
error
;如<‘0’,出错处理
cmpal,‘9’;有键按下,键值与‘9’比拟
jaerror
;如〉‘9’,出错处理
movah,02h
;调用DOS显示字符功能,显示该数字
movdl,al
int21h
.e*it0
;终止程序执行,返回DOS
error:movah,09h
;出错,调用DOS功能显示str2字符串
movd*,offsetstr2
int21h
jmpgetkey
;等待按键
end
;汇编完毕3.7;;*t307.asm
stack
segment
dw512dup(")
stack
ends
data
segment
arraydb255
db0
array1db255dup('$')
array2db0dh,0ah,'$'
dataends
codesegment'code'
assumecs:code,ds:data,ss:stack
start:mova*,data
movds,a*
movah,0ah
;键盘输入字符串
movd*,offsetarray
int21h
movd*,offsetarray2;回车换行
movah,09h
int21h
movb*,offsetarray1
again:moval,[b*]
cmpal,'$'
jzdone
cmpal,'a'
;小于a和大于z的字符不是小写字母
ne*t
cmpal,'z'
jane*t
subal,20h
;在a和z之间的字符才是小写字母,转换为大写
mov[b*],al
;保存到原位置
ne*t:incb*
jmpagain
done:movd*,offsetarray1
movah,09h
int21h
mova*,4c00h
int21h
codeends
endstart3.9;〔1〕movbyteptr[b*],1000
;1000超出了一个字节范围
〔2〕movb*,offsetmyword[si];存放器的值只有程序执行时才能确定,
;而offset是汇编过程计算偏移地址,故无法确定
;可以改为leab*,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)mova*,1234h/16+1Oh
;133h
(3)mova*,NOT(65535*OR1234h)
;1234h
(4)moval,LOW1234hORHIGH5678h
;76h
(5)mova*,23hSHL4
;0234h
(6)mova*,1234hSHR6
;0048h
(7)moval,’a’AND(NOT(’a’-’A’));41h
(8)moval,’H’OR00100000b
;68h
(9)mova*,(76543LT32768)*OR7654h
;7654h3.12;假设block开场的数据块有32个字节数据:16个正数+100(64h),16个负数-48〔0doh〕
分别连续分布:
block
db16dup〔100〕,16dup〔-48〕;也可以是任意字节数据,随意分布。
dplus
db32dup(")
;为正数预留存储空间
dminus
db32dup(")
;为负数预留存储空间
count
equ32
;字节数3.15;mydataseg
segment
my1b
db‘Personalputer’
my2b
db20
my3b
db14h
;20h
my4b
db00010100b
my5w
dw20dup(")
my6c
equ100
;my6c=100
my7c
equ<Personalputer>
mydataseg
ends3.18;段地址:表示标号所在代码段的段地址;
偏移地址:表示标号所在代码段的段内偏移地址;
类型:引用该标号时,表示它所在同一个段――near类型,还是另外一个段――far类型。3.19;mydata
segment
ORGlO0h
VARWDWl234H,5678H
VARBDB3,4
AGLIN4
VARDDD12345678H
EVEN
BUFFDB10DUP(")
MESSDB
’HELLO’
MOVA*,OFFSETVARB+OFFSETMESS
;A*=4+16H=1AH
MOVA*,TYFETYPEBUFF+TYPEMESS+TYPEVARD;A*=1+1+4=06H
MOVA*,SIZEVARW+SIZEBUFF+SIZEMESS;A*=4+10+5=19=13H
MOVA*,LENGTHVARW+LENGTHVARD
;A*=2+1=03H
MOVA*,LENGTHBUFF+SIZEVARW
;A*=10+4=14=0EH
MOVA*,TYPEBIGIN
;A*=FF02H(近〕
MOVA*,OFFSETBEGIN
;A*=1BH
3.22;段定义伪指令
段名
定位
组合
类别
组名
.CODE
_TE*T
WORD
PUBLIC
’CODE’
.DATA
_DATA
WORD
PUBLIC
’DATA’
DGROUP
.STACK
STACK
PARA
STACK
’STACK’DGROUP3.25;.modelsmall
.stack
.data
num
equ5
datalistdw-1,0,2,5,4,"
.code
.startup
movb*,offsetdatalist
movc*,num
*ora*,a*
again:adda*,[b*]
incb*
incb*
loopagain
mov[b*],a*
.e*it0
end3.26;stack
segmentpara‘stack’
dw
512dup(")
stack
ends
data
segment
dwordarray
db100dup(")
data
ends
code
segment‘code’
assumecs:code,ds:data,es:data,ss:stack
org100h
start:mova*,data
movds,a*
moves,a*
movdi,offsetarray
moval,64h
movc*,100
cld
repstosb
mova*,4c00h
int21h
code
ends
endstart3.27;解答;*t327.asm
.model
small
.stack
256
;定义堆栈段大小为256个字节
.data
anum
dd
11223344h
;定义两个双字的数〔随意〕
bnum
dd
77553311h
sum
dd
"
;定义结果,执行后为:88776655h
.code
.startup
*or
si,si
;相对于变量的位移量清零
mov
c*,2
;分上下字分别相加,共两次
clc
;清零cf
again:mova*,anum[si]
;取第一个数的一个字〔先低字后高字〕
adca*,bnum[si]
;取第二个数的一个字〔先低字后高字〕
movsum[si],a*
;存和的一个字〔先低字后高字〕
incsi
;修改位移量指向下一个字〔加2〕
incsi
loop
again
;c*=c*-1,ifc*<>0,jumpagain
.e*it0
end3.28;
.startup
*or
si,si
;位移量清零
moval,bdata[si]
;取第一个数
movc*,num-1
;累加次数
again:inc
si
;指向下一个数
adcal,
bdata[si]
;累加
loop
again
;如未完,继续累加
mov
sum,al
;完了,存结果
.e*it0
end4.3;思路:设这四组从低位到高位分别放在AL、BL、CL和DL存放器中。这里仅列出代码段:
movbl,al
;将al中的两组分开
andal,0fh
;屏蔽高四位后送al
movcl,4
;原al中的数据逻辑右移4次送bl
shrbl,cl
movdl,ah
;将ah中的两组分开
anddl,0f0h
;屏蔽低高四位后送dl
movcl,4
;原ah中的数据逻辑右移4次送dl
shrdl,cl
movcl,ah
;屏蔽高四位后送cl
andcl,0fh4.4;getkey:movah,1
;从键盘输入,出口:al存键值
int21h
cmp
al,’a’
;判键值是小写字母?
getkay
cmp
al,’z’
ja
getkay
subal,20h
;是小写字母转换为大写字母
movah,09h
;显示
int21h4.8;〔1〕将jmptable[b*]指令改为:movd*,table[b*]
〔2〕去掉源程序中:.e*it0---end之间的语句4.17;.modelsmall
.stack256
.data
stri1db’pleaseinputnumber:1--9’,odh,oah,’$’
.code
.startup
again:mov
d*,offsetstri1
;显示stri1,提示输入
movah,09h
int21h
movah,01h
;调用输入一个字符
int
21h
;输入一个字符存在al中
cmpal,’1’;判该字符,如不在‘1’--‘9’
again
;重新输入
cmpal,’9’
ja
again
andal,0fh
;在‘1’--‘9’,屏蔽高4位
movc*,al
;振铃次数送c*
.repeat
movdl,07h
;调用一次振铃
movah,02h
int21h
movd*,0ffffh
;延时
abc:decd*
jnzabc
.untilc*z
;c*=c*-1,c*=0退出
.e*it0
end4.22;crazy
PROC
;crazy
PROC
pusha*
;
*ora*,a*
;
*ora*,a*
*ord*,d*
;
*ord*,d*
again:
adda*,[b*]
;again:
adda*,[b*]
adcd*,0
;
adcd*,0
incb*
;
incb*
incb*
;
incb*
loopagain
;
loopagain
ret
;
ret
ENDPcrazy
;crazy
ENDP4.25;子程序中又调用子程序就形成子程序嵌套。子程序中直接或间接调用该子程序本身就形成子程序递归。4.26;
.modelsmall
.stack256
.data
stdng
db’HeLLOeveRyboDy!’,0
.code
.startup
movb*,offsetatring
again:moval,[b*]
callchan
;调用过程
mov[b*],al
ne*t:incb*
jmpagain
done:.e*it0
chan
proc
;大写转换为小写字母的过程
oral,al
jzdone
cmpal,’A’
ne*t
cmpal,’Z’
jane*t
oral,20h
ret
chan
endp
end4.27;astob
proc
anddh,0fh
;十位数的ASCII码转为二进制数
moval,dh
mul10
;al=10*dh
anddl,0fh
;个位数的ASCII码转为二进制数
addal,dl
;al=10*dh+dl
ret
astob
endp5.1;cmp*,5
je
abc
jmp
done
abc:cmpa*,b*
jne
cde
jmp
done
cde:inca*
done:....5.2;cmp*,5
je
abc
jmp
done
cmpa*,b*
jne
abc
jmp
done
abc:
inca*
done:
....5.4;宏定义采用一对伪指令实现,格式如下〔其中方括号表示可选〕:
宏名
macro
[形参表]
宏定义体
endm
宏调用时,利用宏名带上实参即可,格式如下:
宏名[实参表]5.6;宏的参数功能非常强大,即可以没有参数,也可以带有一个或多个参数;而且参数的形式非常灵活,可以是常量、变量、存储单元、指令或它们的一局部,还可以是表达式等。宏展开时的形参与实参结合是用位置匹配的实参对形参进展取代。实参个数与形参个数不同时,多余的实参没有作用,缺少的实参则用空格代替。取代时,不进展有效性等检查。5.7;宏汇编的特点是在汇编阶段进展语句展开,无需返回,不减少目标程序代码,执行速度没有改变;通过形参、实参结合传递参数。宏汇编适合于程序段较短或要求执行速度快的场合。子程序在执行阶段需要由主程序执行调用指令CALL进展调用,进而转入子程序执行,子程序执行完毕执行返回指令RET返回主程序。子程序如果被屡次使用,则会减少目标程序代码;主程序与子程序之间主要采用存放器、存储单元、堆栈等传递参数。子程序适合于程序段较长或为减少目标代码的场合。5.9;shrotwordptr[b*],4,ror
1
pushc*
1
movcl,4
1
rorwordptr[b*],cl
1
popc*5.10;ogical
macrolcode,dopd,sopd
lcodedopd,sopd
endm
例如,如果使用"anda*,[b*]〞指令,可以利用该宏定义,写出宏指令如下:
logicaland,a*,[b*]
初看起来,这个问题似乎比拟难解决。实际上,这4条逻辑指令都具有一样的指令操作数格式,所以可以归纳为如上宏定义。5.12;move
MACROdoprnd,soprnd
pusha*
mova*,soprnd
movdoprnd,a*
popa*
ENDM第五章(02)5.13;解答movstr
strN,dstr,sstr
leasi,sstr
leadi,dstr
movc*,strN
cld
repmovsb
endm5.14;①ABSDIFPl,P2,DISTANCE
②ABSDIF[B*],[SI],[DI]
1
pusha*
答:1
pusha*
1
mova*,P1
1
mova*,[b*]
1
suba*,P2
1
suba*,[si]
1
cmpa*,0
1
cmpa*,0
1
jge""0000
1
jge""0000
1
nega*
1
nega*
1
""0000
1
""0000
1
movDISTANCE,a*
1
mov[di],a*
1popa*
1popa*5.15;wtemp
=2
repeat100
dw0
dwwtemp
wtemp
=wtemp+2
endm5.18;DOS21H
MACROcallnum,calladdress
movah,callnum
ifnb
movd*,calladdress
endif
int21h
ENDM5.22;1.编写主程序,并进展汇编产生OBJ模块;2.编写独立的子程序,也进展汇编产生OBJ模块;3.分别编写主程序与子程序时,需要处理好共用变量、过程、逻辑段属性、参数传递等问题;4.利用连接程序将主程序模块和子程序模块连接起来,形成完整的可执行程序。5.28;;数据段
tabledw2277,2138,1808,1709,1522,1356,1208,1139
;对应中音1~7和高音i的定时器记数值
;代码段
moval,0b6h
;设置定时器2工作方式
out43h,al
again:movah,1
;等待按键
int21h
cmpal,’1’
;判断是否为数字1~8
ne*t
cmpal,’8’
jane*t
subal,30h
;1~8的ASCII码转换为二进制数
subal,1
;再减1,将数字1~8变为0~7,以便查表
*orah,ah
shla*,1
;乘以2
movb*,a*
;记数值表是16位数据,无法采用*lat指令
mova*,table[b*]
;取出对应的记数值
out42h,al
;设置定时器2的记数值
moval,ah
out42h,al
inal,61h
;翻开扬声器声音
oral,03h
;使D1D0=PB1PB0=11b,其他位不变
out61h,al
jmpagain
;连续发声,直到按下另一个键
ne*t:pusha*
inal,61h
;不是数字1~8,则关闭扬声器声音
andal,0fch
;使D1D0=PB1PB0=00b,其他位不变
out61h,al
popa*
cmpal,1bh
;判断是否为ESC键〔对应ASCII码1bh〕
jneagain
;不是ESC,继续;否则程序执行完毕1.〔1〕立即寻址
没有
〔2〕直接寻址
7237H〔3〕使用B*的存放器寻址
没有
〔4〕使用B*的间接寻址
637DH〔5〕使用B*的存放器相对寻址
0D5F0H(6)
基址变址寻址
8E18H〔7〕相对基址变址
004FH2。根据以下要求,写出相应的汇编指令。〔1〕ADD
D*,B*
(2)
ADD
AL,[B*][SI]
(3)
ADD
[B*][0B2H],
C*
(4)
MOV
A*,2A59H
ADD
[0524H]
,A*(5)
ADD
AL
,0B5H
3。〔1〕存放器间接寻址
MOV
B*,OFFSET
BLOCKADD
B*,OAH
MOV
D*
,[B*]〔2〕存放器相对寻址
MOV
B*,0AH
MOV
D*,BLOCK[B*](3)基址变址寻址MOV
B*
,
OFFSET
BLOCK
MOV
SI,OAHMOV
D*,[B*][SI]
4。现有〔DS〕=2000H,(B*)=0100H,(SI)=0002H,(20210)=12H,(20211)=34H,(20212)=56H,(20213)=78H,(21200)=2AH,(20211)=4CH,(21202)=B7H,(21203)=65H,试说明以下各条指令执行完后,A*存放器的内容。〔1〕MOV
A*,1200H
1200H
(2)
MOV
A*,B*
0100H
(3)
MOV
A*,[1200]
4C2AH
〔4〕MOV
A*,[B*]
3412H
〔5〕MOV
1100[B*]
4C2AH
(6)
MOV
A*,[B*][SI]
7856H
(7)
MOV
A*,1100[B*][SI]
65B7H
5。〔1〕
7CD9H
(2)
〔212A0+1200〕H=0600H
(3)
〔212A0H+1200H+5119H〕H=098AH6。
MOV
B*,2000H
或
LES
B*,[2000]
LES
DI
,[B*]
MOV
A*,ES:[B*]
MOV
A*,
ES:DI
7。转向地址OBJ的值分别为:〔1〕064DH
(2)0691H
(3)05ECH
注意有符号数的符号位~~8。〔1〕
MOV
A*,0ABH
立即数寻址无物理地址〔2〕MOV
A*,B*存放器寻址
同上〔3〕MOV
A*,[100]
直接寻址
20210H〔4〕MOV
A*,VAL
直接寻址
20050H(5)
MOV
A*,[B*]
存放器间接寻址
20210H(6)
MOV
A*,ES:[B*]
直接寻址
21100H(7)
MOV
A*,[BP]
存放器间接寻址
20010H〔8〕MOV
A*,[SI]
同上
200A0H
(9)
MOV
A*,[B*+10]
存放器相对寻址
20210H〔10〕MOV
A*,VAL[B*]
同上20210H
(11)
MOV
A*,[B*][SI]
基址变址寻址201A0H
(12)
MOV
A*,VAL[B*][SI]
相对基相变址寻址201F0H
9。〔1〕的指令:
MOV
A*,
[B*][0CH]
MOV
ZREO
,A*
(2)
的指令:
MOV
A*,ARRAY[B*]
MOV
ZREO,A*10。
MOV
A*,TABLE是把符号地址TABLE里的内容送到A*里,指令执行完后,(A*)=1234H
LEA
A*,TABLE
是把符号地址TABLE
的有效地址〔这里是偏移量〕送到指定存放器A*里,指令执行完后,〔A*〕=0032H11。执行完指令后,〔A*〕=1E00H12。
LEA
A*,CSTRING
MOV
DL,A*
MOV
DH,[A*+6]13。这个嘛不想做了
,麻烦啊~14。LES
B*,[2000]
MOV
A*,ES:[B*]
注意:一开场我写的是:
MOV
A*,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
017。(1).MOV
A*,Z
;把Z送到A*
SUB
A*,*
;Z-*
ADD
A*,W
;W+(Z-*)
MOV
Z,A*
;结果保存在Z中(2).
MOV
A*,R
;R送到A*中
ADD
A*,9
;R+9
MOV
B*,*
;*送到B*中
ADD
B*,6
;*+6
ADD
A*,B*
;〔R+9〕+(*+6),结果保存在A*中
MOV
B*,W
;
W送到B*中
SUB
B*,A*
;
W-〔R+9〕-(*+6),连续减去两个数,相当于减去这两个数的和~~
MOV
Z,B*
;最终结果送到Z中(3)MOV
A*,W
;把W送到A*IMUL
*
;W**
注意:低十六位保存在A*里,高十六位保存在D*里MOV
B*,Y
;把Y送到B*
里ADD
B*,6
;Y+6IDIV
B*
;〔W**〕/(Y+6)
注意:商保存在A*里,余数保存在D*里MOV
Z,A*
;把商送到Z中,MOV
R,D*
;把余数
送到R中(4)MOV
A*,W
;把W送到A*中SUB
A*,*
;W-*CWD
;把A*中的十六位带符号数扩展成为32位,低十六位保存在A*中,高十六位保存在D*中
MOV
B*,5
;把5送到B*中IDIV
B*
;〔W-*〕/5
被除数为32位,除数为16位
商为16位
IMUL
Y
;上一步结果再乖以Y,积为32位MOV
B*,2
;把2送到B*中
IMUL
B*
;上一步乘法所得的积再乘以2,各为64位MOV
Z,EA*
;把结果中低32位放入Z双字单元中MOV
[Z+4],ED*
;把结果中高32位放入Z+4双字单元中
18。指令本条指令执行完后A*的内容
执行完后CF,SF,ZF的值MOV
A*,1234H
1234H
0
0
0MOV
CL,4
1234H
0
0
0
ROL
A*,CL
2341H
1
0
0DEC
A*
2340H
1
0
0
MOV
C*,42340H
1
0
0
MUL
C*
8918H
0
0
0INT
20H
程序完毕后,〔A*〕=8918H
(D*)=0000H19。指令
执行完后A*的内容执行完后CF
,SF,ZF和OF的值MOV
A*,0
0
0010DEC
A*
FFFFH
0100ADD
A*,7FFFH
7FFEH
0000ADD
A*,2
8000H
0101NOT
A*
7FFFH
0101
SUB
A*,0FFFFH
8000H
1101ADD
A*,8000H
0000H
1011SUB
A*,1
FFFFH
1101
AND
A*,58D1H
58D1H
0000
SAL
A*,1
B1A2H
0101SAR
A*,1
D8D1H
0100NEG
A*
272FH
1000
ROR
A*,1
9397H
1001
20。〔1〕MOV
A*,DATA*
ADD
DATAY,A*〔2〕MOV
A*,DATA*
ADD
DATAY,A*
MOV
A*,[DATA*+2]
ADD
[DATAY+2]
,A*〔3〕本組指令的作用是:B*
<------[DATA*]+[DATAY]+[1](CF的值)
帶進位加法~
〔4〕MOV
A*,DATA*
MUL
DATAY
;結果的高十六位保存在D*裏,低十六位保存在A*裏
〔5〕MOV
A*,DATA*
MOV
D*,[DATA*+2]
MUL
DWORD
DATAY
;結果的高三十二位保存在ED*裏,低三十二位保存在EA*裏;這裏所用的DWORD為一屬性操作符,在第四章會學到~~
〔6〕MOV
A*,DATA*
DIV
17H
;結果商保存在AL中,余數在AH中
〔7〕MOV
A*,DATA*
CDW
DIV
DATAY
21。NEG
D*
NEG
A*
SBB
D*,022。MOV
A*,A
;把雙字長數的低字放到A*中MOV
D*,[A+2]
;把雙字長數的高字放到D*中TEST
D*,8000H
;測試雙字長數的符號JZ
RIGHT
;如果是非負數,則直接保存NEG
D*
;如果是負數,則求補NEG
A*SBB
D*,0
RIGHT:
MOV
B
,A*
MOV
[B+2],D*1。指令以下指令的错误〔1〕
MOV
AH,B*
源操作数与目的操作数长度不一样~〔2〕
MOV
[B*],[SI]
这是两个内存单元在传递数据,而这在汇编语言中是不允许的~~~
(3)
MOV
A*,[SI][DI]
不能用两个变址连用,其中一个应为基址~〔4〕
MOV
MYDAT[B*][SI],ES:A*
同〔2〕〔5〕
MOV
BYTE
PTR[B*],1000
必须有一个为存放器〔6〕MOV
B*,OFFSET
MYDAT[SI]
OFFSET
不能与复杂操作数相连~〔7〕MOV
CS,A*
不能对CS赋值~〔8〕MOV
EC*,A*
操作数类型不同~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
A*,5150H
MOV
ADDRESS
,A*等,写出几个就可以~~7。DATASG
SEGMENT
FLD1B
DB
'personal
puter'
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
0FFF0HFLD2W
DW
01011001BFLD3W
DW
FLD7BFLD4W
DW
5,6,7,8,9FLD5W
DW
5
DUP
〔0〕FLD6W
DW
〔FLD6W-FLD1W〕-〔FLD7B-FLD1B〕8。PLENTH
的值为22,GE表示该数据段的长度~9。L的值为710。〔1〕MOV
A*,OFFSET
LNAME
〔2〕MOV
SI,WORD
PTR
CODE_LIST
〔3〕CODE_LENGHT
EQU
$-CODE_LIST11。代码如下:DATA_SEG
SEGMENT
DB
5
DATA_LIST
DW
0FFFFH,0,2,5,4,
5
DUP
(")DATA_SEG
ENDSCODE_SEG
SEGMENTASSUME
CS:CODE_SEG,DS:DATA_SEGMOV
A*,5MOV
MA*,A*MOV
A*,0FFFFHMOV
MIN,A*
CODE_SEG
ENDS12。〔1〕10025
〔2〕19
〔3〕2548
〔4〕3
〔5〕103
〔6〕0FFFFH
〔7〕1
〔8〕3
13。分别汇编成为:MOV
A*,0AHMOV
BL,0AHMOV
CL,114。〔1〕〔A*〕=1
〔2〕〔A*〕=2
〔3〕〔C*〕=14H
〔4〕〔D*〕=32H
〔5〕〔C*〕=1]15。〔1〕操作符错误
改为:
DATA_SEG
SEGMENT
(2)缺少段名
在前面加个段名
〔3〕引用应该从;开场
把那个"/〞改成";〞
〔4〕构造混乱
改为:
MAIN_PROC
PROC
FAR
。。。。MAIN_PROC
ENDPEND
16。程序
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 木结构建筑的保温隔热性能分析考核试卷
- 生物药品的用药指导与患者教育考核试卷
- 生物科学教学设备考核试卷
- 石油产品销售模式转型考核试卷
- 生态保护与城市生态岛屿建设考核试卷
- 物联网智慧社区设计与规划考核试卷
- 照明器具生产中的设备安全管理要点考核试卷
- 极速瘦腿课程介绍
- 《太平天国》列强侵华与晚晴时期的救亡图存课件-1
- 七年级英语下学期期中模拟卷(南通专用)(原卷版)
- 歌曲Wonderful U:美妙的你.中英互译
- 部编教材教读课教学课例例说课件
- 冀教2011版四年级英语下册《Lesson23MyFavouriteSchoolWork》评课稿
- 设备安装调试验收单
- 综合能力测试真题和答案
- 双眼视与斜视弱视学智慧树知到答案章节测试2023年温州医科大学
- Q-CR 783.1-2021 铁路通信网络安全技术要求 第1部分:总体技术要求
- GB/T 27548-2011移动式升降工作平台安全规则、检查、维护和操作
- GB/T 24538-2009坠落防护缓冲器
- GB/T 13738.3-2012红茶第3部分:小种红茶
- 沪科版八年级物理《5.1-质量》课件
评论
0/150
提交评论