📄 ibm-pc.txt
字号:
5.6编写程序,将一个包含有20个数据的数组M分成两个数组:正数数组和负数数组N,并分别把这两个数组中的数据个数显示出来。
.model small
.386
.data
M DB 1,2,3,4,5,6,7,8,9,10,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10
P DB 20 dup(?)
N DB 20 dup(?)
.code
MAIN PROC FAR
start:
PUSH ds
AND ax,0
PUSH ax
MOV ax,@data
mov ds,ax
MOV bx,0
MOV si,0
MOV di,0
MOV cx,20D
cmpe :
CMP M[bx],0
JL ifLow
hight :
MOV al,byte ptr M[bx]
MOV byte ptr P[si],al
inc si
JMP commonContrl
ifLow :
MOV al,byte ptr M[bx]
MOV byte ptr N[di],al
INC di
commonContrl:
INC bx
loop cmpe
mov ax,si
call showNumber
call printCR
mov ax,di
call showNumber
exit: ret
MAIN ENDP
;;;;;;;;;;;;;;;;;注意,ShowNumber这个子过程有问题,请自行修改;;;;;;;;;;;;;;;;
showNumber PROC NEAR
covernum:
DAA
MOV dx,ax
MOV cl,2H
show:
ROL dl,4H
push dx
AND dl,0fH
ADD dl,30H
MOV ah,02H
int 21H
pop dx
loop show
ret
showNumber ENDP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
printCR PROC NEAR
mov dl,0aH
mov ah,02H
int 21H
mov dl,0dH
mov ah,02H
int 21H
ret
printCR ENDP
end start
5.7编制一个汇编语言程序,求出首地址为DATA的100D字数组中的最小偶数,并把它放在AX中。
此题根据题意要求应该使用完整汇编格式,因为精简格式也使用DATA....
dataare segment
DATA DW 3322H,4555H,200H,3544H,1245H
num DB ($-DATA)/2
dataare ends
code segment
assume cs:code,ds:dataare
MAIN PROC FAR
start:
push ds
mov ax,0H
push ax
mov ax,dataare
mov ds,ax
mov dx,0H ;偶数数量计数
mov cx,Word ptr [num]
mov si,0H
isO:
mov bx,WORD PTR DATA[si]
shr bx,1H
jnc addDX
jmp commonControl
addDX:
ADD dx,1H
cmp dx,1H
je firstAXValue
compare:
mov bx,WORD PTR DATA[si]
cmp bx,ax
jge commonControl
mov ax,bx
commonControl:
ADD si,2H
loop isO
jmp exit
firstAXvalue:
mov ax,WORD PTR DATA[si]
jmp compare
exit:
ret
MAIN ENDP
code ends
END start
5.8没有做。。
5.9编写一个汇编语言程序,要求从键盘上接收一个思维的十六位进制数,并在终端上显示与它等值的二进制数。
.model small
.386
.code
main proc far
start:
push ds
mov ax,0
push ax
mov ax,0
mov cx,4
mov dx,0
input:
mov ah,1H
int 21H
cmp al,30H
jl input
cmp al,39H
jle s
cmp al,61H
jl input
cmp al,66H
jg input
sub al,27H
s:
sub al,30H
add dl,al
cmp cx,1H
je f
rol dx,4
f:
loop input
exit:
call print
ret
main endp
print proc near
mov cx,10H
p:
rol dx,1
push dx
and dx,1
add dx,30H
mov ah,2
int 21H
pop dx
loop p
ret
print endp
end start
5.10设有一段英文,其变量字符名为ENG,并以$字符结束。试编写一程序,查对单词SUN在该文中的出现次数,并以格式"SUN XXXX"显示出次数。
.model small
.386
.data
ENG db 'SUN's SUN JAVA',24H ;;;;24H = $
MESSAGE db 'SUN:','$'
.stack 100H
.code
MAIN PROC FAR
start:
PUSH DS
AND AX,0
PUSH AX
MOV AX,@data
MOV DS,AX
;------------------------
MOV AX,0H
MOV SI,1H
subSI1:
SUB SI,1H
subSI2:
SUB SI,1H
compareS:
ADD SI,1H
MOV DL,ENG[SI]
CMP DL,24H
JE print
CMP DL,53H
JNE compareS
compareU:
ADD SI,1H
MOV DL,ENG[SI]
CMP DL,55H
JNE subSI2
compareN:
ADD SI,1H
MOV DL,ENG[SI]
CMP DL,4EH
JNE subSI1
INC AX
JMP compares
print:
LEA DX,MESSAGE
PUSH AX
MOV AH,09H
INT 21H
POP AX
call showNumber
exit:
ret
MAIN ENDP
;;;;;;;;;;;;;;;;;注意,ShowNumber这个子过程有问题,请自行修改;;;;;;;;;;;;;;;;
showNumber PROC NEAR
covernum:
DAA
MOV dx,ax
MOV cl,4H
show:
ROL dx,4H
push dx
AND dx,0fH
ADD dx,30H
MOV ah,02H
int 21H
pop dx
loop show
ret
showNumber ENDP
END start
5.11从键盘输入一系列以$为结束副的字符串,然后对其中的非数字字符计数,并显示出计数结果。
.model small
.386
.code
MAIN PROC FAR
start:
push ds
mov ax,0
push ax
mov cx,0
input:
mov ah,1H
int 21H
compare:
cmp al,24H
je print
cmp al,30H
jl addCount
cmp al,39H
jg addCount
addCount:
add ax,1H
jmp input
print:
call showNumber
exit: ret
MAIN ENDP
;;;;;;;;;;;;;;;;;注意,ShowNumber这个子过程有问题,请自行修改;;;;;;;;;;;;;;;;
showNumber PROC NEAR
covernum:
DAA
MOV dx,ax
MOV cl,2H
show:
ROL dl,4H
push dx
AND dl,0fH
ADD dl,30H
MOV ah,02H
int 21H
pop dx
loop show
ret
showNumber ENDP
END start
5.12 有一个首地址为MEM的100D字数组,试编制程序删除数组中所有为零的项,并将后续项向前压缩,最后将数组的剩余部分补上零。
.model small
.386
.stack 100H
.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
.code
MAIN PROC FAR
start:
push ds
and ax,0
push ax
mov ax,@data
mov ds,ax
;----------------------
mov ax,0H
mov bx,64H
mov cx,64H
mov si,0FFFEH
repeat:
ADD si,2H
cmp MEM[si],0H
JE calls
loop repeat
calls:
INC ax
call sort
cmp ax,1H
JE lastValue
DEC cx
jmp repeat
exit :
ret
lastValue:
mov mem[bx],0H
DEC cx
jmp repeat
MAIN ENDP
sort PROC NEAR
push cx
push si
sub si,2H
s:
add si,2H
mov dx,mem[si]
mov mem[si+2],dx
loop s
return:
pop si
pop cx
ret
sort ENDP
END start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -