汇编语言编程题目资料答案Word下载.docx
《汇编语言编程题目资料答案Word下载.docx》由会员分享,可在线阅读,更多相关《汇编语言编程题目资料答案Word下载.docx(16页珍藏版)》请在冰豆网上搜索。
ax,cl
al,0FH
BYTE
PTR
x[si],al
pop
add
si,2
Loop
lop
al,[X]
bl,[X+2]
cl,[X+4]
dl,[X+6]
ah,02H
int
21H
dl,al
dl,bl
dl,cl
exit:
ret
ENDP
END
start
5.3
试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示MATCH,若不相同则显示NOMATCH。
data
segment
string1
db
"
111111111"
13,10,"
$"
string2
222222222"
inf1
match!
inf2
no
ends
code
segment
main
proc
far
assume
ds:
data,cs:
code,es:
code
ds
ax,0
ax
ax,data
ds,ax
es,ax
lea
si,string1
di,string2
cx,9
repz
cmpsb
jz
match
dx,inf2
jmp
disp
match:
dx,inf1
disp
:
ah,09
21h
endp
end
start
5.4
试编写一程序,要求能从键盘接收一个个位数N,然后响铃N次(响铃的ASCII码为07H)。
far
sub
ax,ax
ah,01H
cmp
al,20H
je
exit
al,30H
jle
input
al,3AH
jge
cx,ax
cx,0FFH
dl,07H
ah,2H
loop
endp
5.5
编写程序,将一个包含有20个数据的数组M分成两个数组:
正数数组P和负数数组N,并分别把这两个数组中数据的个数显示出来。
DATASEGMENT
BUFDB-32,
25,
36,
-18,
-64,
0,
-3
COUNTEQU$
-
BUF
PLUSDB?
;
存放正数
MINUSDB?
存放负数
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVBL,0;
负数个数
MOVDL,0;
正数个数
MOVSI,OFFSETBUF;
首地址
MOVCX,COUNT;
循环次数
LOP1:
MOVAL,[SI];
取第一个数
CMPAL,0;
和0比较
JGENEXT0;
大于等于0,
转
INCBL;
小于0,
BL加1
JMPNEXT1;
NEXT1
NEXT0:
INCDL;
DL加1
NEXT1:
INCSI;
指针增1
DECCX;
循环次数减1
JNZLOP1;
CX不等于0,
转回
MOVMINUS,BL;
存储负数个数
MOVPLUS,DL;
存储正数个数
CODEENDS
ENDSTART
5.6
试编写一汇编语言程序,要求从键盘接收一个4位的十六进制数,并在终端上显示与它等值的二进制数。
stackssegmentstack
sdb20dup(0)
stacksends
datasegment
nequ4
chardbn+1;
输入内存字符
db0
dbn+1dup(0)
inputdb'
Inputthenumber:
'
0dh,0ah,'
$'
enterdb0dh,0ah,'
outputdb'
Resultis:
dataends
codesegment
assumecs:
code,ss:
stacks,ds:
movax,data
movds,ax
leadx,input
movah,9
int21h
leadx,char
movah,0ah
leadx,enter
movsi,2
movcx,4
l0:
movbl,char[si]
cmpbl,30h
jbstart
cmpbl,39h
jbel00
cmpbl,61h
cmpbl,66h
jastart
subbl,57h
jmpl333
l00:
subbl,30h
l333:
movchar[si],bl
incsi
deccx
jnzl0
leadx,output
l000:
movbl,char[si]
movch,4
movcl,4
shlbl,cl
ll00:
testbl,80h
jnzl1
movdl,'
0'
movah,2
jmpl2
l1:
movdl,'
1'
l2:
shlbl,1
decch
jnzll00
cmpsi,6
jnel000
movah,4ch
codeends
endstart
5.7
设有一段英文,其字符变量名为ENG,并以$字符结束。
试编写一程序,查对单词SUN在该文中的出现次数,并以格式“SUNXXXX”显示出次数。
Z,0
esi,ENG
lp1:
lodsb
lp2:
al,"
toQuit
S"
jnz
lp1
U"
lp2
N"
inc
Z
toQuit:
5.8
有一个首地址为MEM的100D字数组,试编制程序删除数组中所有为零的项,并将后续项向前压缩,最后将数组的剩余部分补上零。
stack
.data
mem
dw
12,0,0,0,0,0,1,2,3,6,4,7,8,2,1,0,0,54,5,0,2,4,7,8,0,5,6,2,1,4,8,5,1,45,7,5,1,2,0,2,4,0,2,54,0,12,0,0,0,0,0,1,2,3,6,4,7,8,2,1,0,0,54,5,0,2,4,7,8,0,5,6,2,1,4,8,5,1,45,7,5,1,2,0,2,4,0,2,54,0,45,7,5,1,2,0,2,4,0,2
ax,0
ax,@data
ds,ax
----------------------
ax,0H
bx,64H
cx,64H
si,0FFFEH
repeat:
ADD
si,2H
MEM[si],0H
JE
calls
repeat
calls:
INC
call
sort
ax,1H
lastValue
DEC
lastValue:
mem[bx],0H
NEAR
si
s:
dx,mem[si]
mem[si+2],dx
s
return:
5.9
在STRING到STRING+99单元中存放着一个字符串,试编制一程序测试该字符串中是否存在数字。
如有,则把CL的第5位置1,否则将该位置0。
XOREBX,EBX
MOVESI,OFFSET
STRING
MOVECX,99
START_LOOP:
LODSB
CMPAL,'
JCLOOP_NEXT
9'
JNCLOOP_NEXT
ORBL,10H
LOOP_NEXT:
LOOPSTART_LOOP
MOVCL,BL
5.10
在首地址为TABLE的数组中按递增次序存放着100H个16位补码数。
试编写一个程序把出现次数最多的数及其出现次数分别存放于AX和CX中。
segment
Tabledw
0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9
dw
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,-1,-1
Resultdw
0,0,0,0
data
ends
code
segment
assume
cs:
code,ds:
data
start:
mov
ax,
movds,
ax
-------------------------------
movsi,
offset
Table
movax,
[si]
ax存放最大数
movbx,
bx存放最小数
movcx,
199
循环199次
@C001:
incsi
movdx,
cmpdx,
jg@C002
bx
jl@C003
jmp@C004
@C002:
dx
@C003:
@C004:
loop@C001
保存结果
movResult,
movResult+2,
200
@C005:
xordx,
pushcx
movdi,
@C006:
[di]
cmpax,
jnz@C007
incdx
@C007:
incdi
loop@C006
popcx
Result+6
jle@C008
movResult+4,
movResult+6,
@C008:
loop@C005
ax,4c00h
int
21h
ends
end
start
最后结果
Result
9,
-1,
5,
36
5.11
试编制一个程序,把AX中的十六进制数转换为ASCII码,并将对应的ASCII码依次存放到MEM数组中的4个字节中。
例如,当(AX)=2A49H时,程序执行完后,MEM中的4个字节内容分别为39H,34H,41H和32H。
x
Y'
'
y
N'
ends
cs:
code,ds,data
ax,data
ah,01
21h
al,'
a'
ja
abc
abc:
z'
jb
abc1
abc1:
dl,offset
ah,9
A'
ab
ab:
Z'
ab1
ab1:
ac
ac:
ah,4ch
5.12
已知数组A包含15个互不相等的整数,数组B包含20个互不相等的整数。
试编制一程序,把既在A中又在B中出现的整数存放于数组C中。
DATA
SEGMENT
A
DB1,3,4,6,10,12,15,21,33,2,40,42,46,48,55
B
DB2,3,6,21,33,41,55,88,8,66,21,10,22,23,56,48,50,51,89,100
Z
DB15DUP(?
)
ENDS
CODE
ASSUMEDS:
DATA,CS:
CODE
START:
MOV
AX,DATA
DS,AX
LEA
SI,A
BX,Z
CX,15
CLD
LOP1:
LODSB
PUSH
CX(保存外环CX)
CX,20(内环次数)
DI,B(每次内环完,重新赋值)
LOP2:
CMP
AL,[DI]
LOP3(相等,退出内环)
DI
LOOP
LOP2
JMP
LOP4(内环完毕而没有相等的就直接到外环)
LOP3:
[BX],AL
BX
LOP4:
POP
CX(外环出栈)
LOP1
AH,4CH
INT
21H
START
5.13
从键盘输入一系列字符(以回车符结束),并按字母、数字及其他字符分类计数,最后显示出这三类的计数结果。
datarea
count
0,0,0
分别存放字母、字母和其他字符的个数
datarea
main
proc
far
push
ds
sub
ax,ax
push
ax,datarea
dx,ax
next:
ah,01
判断是否为字母
cmp
al,0dh
jz
exit
al,5ah
jg
other
al,41h
jl
shuzi