列出所编写的汇编源程序的代码,对主要语句进行注释 datas segment stoktab db '11','Excavators' db '12','Lifters' db '13','Presses' db '14','Valves' db '15','Processors' db '16','Pumps' LEN EQU $-stoktab string1 db 0DH,0AH,'Please input the number:$' string2 db 0DH,0AH,'Not in table$' BUF1 db 0DH,0AH,50 DUP(0) BUF2 db 81,0,80 DUP(0) datas ends stacks segment DB 100 DUP(0) stacks ends codes segment assume cs:codes,ds:datas,ss:stacks start: mov ax,datas mov ds,ax ; 获取用户输入的编号 mov es,ax lop1: LEA dx,string1 mov ah,09h int 21h ; 调用DOS中断,将输入的字符存入AL lea dx,buf2 mov ah,0ah int 21h cmp [buf2+2],'Q' jz exit mov al,[buf2+1] cmp al,2 jnz no cmp [buf2+2],'1' jnz no mov al,[buf2+3] cmp al,'6' ja no mov cl,al and cx,0fh lea di,stoktab mov al,31h cld ;以上为条件判断 lop2: push cx mov cx,len repnz scasb inc di pop cx loop lop2 mov si,1 mov bx,di dec bx mov cx,len lop3: inc si inc bx mov al,[bx] cmp al,'A' jb next2 mov [buf1+si],al loop lop3 next2: mov [buf1+si],'$' lea dx,buf1 mov ah,09h int 21h jmp lop1 no: lea dx,string2 mov ah,09h int 21h jmp lop1 exit: mov ah,4ch int 21h mov ah,4ch; 调用DOS中断,结束程序运行 int 21h codes ends end start
时间: 2024-02-10 17:33:18 浏览: 130
汇编计算器程序源代码
4星 · 用户满意度95%
这是一段汇编语言的代码,主要功能是输入一个数字,然后查找该数字对应的名称,并将名称输出。下面是代码的注释:
datas segment
stoktab db '11','Excavators' ; 存储编号和名称
db '12','Lifters'
db '13','Presses'
db '14','Valves'
db '15','Processors'
db '16','Pumps'
LEN EQU $-stoktab ; 计算stoktab的长度
string1 db 0DH,0AH,'Please input the number:$' ; 输入提示语句
string2 db 0DH,0AH,'Not in table$' ; 错误提示语句
BUF1 db 0DH,0AH,50 DUP(0) ; 用于存储输入的字符
BUF2 db 81,0,80 DUP(0) ; 用于存储用户输入的数字
datas ends
stacks segment
DB 100 DUP(0) ; 定义堆栈
stacks ends
codes segment
assume cs:codes,ds:datas,ss:stacks
start:
mov ax,datas ; 将数据段地址存入AX
mov ds,ax ; 将数据段地址存入DS
; 获取用户输入的数字
mov es,ax
lop1:
LEA dx,string1 ; 输出提示语句
mov ah,09h
int 21h
; 将用户输入的字符存入BUF2
lea dx,buf2
mov ah,0ah
int 21h
; 判断用户是否输入了Q,若是则退出程序
cmp [buf2+2],'Q'
jz exit
; 判断用户输入的数字是否在表中
mov al,[buf2+1]
cmp al,2
jnz no
cmp [buf2+2],'1'
jnz no
mov al,[buf2+3]
cmp al,'6'
ja no
; 在stoktab中查找对应的名称
mov cl,al
and cx,0fh
lea di,stoktab
mov al,31h
cld
lop2:
push cx
mov cx,len
repnz scasb
inc di
pop cx
loop lop2
; 将名称存入BUF1并输出
mov si,1
mov bx,di
dec bx
mov cx,len
lop3:
inc si
inc bx
mov al,[bx]
cmp al,'A'
jb next2
mov [buf1+si],al
loop lop3
next2:
mov [buf1+si],'$'
lea dx,buf1
mov ah,09h
int 21h
jmp lop1
no:
lea dx,string2 ; 输出错误提示语句
mov ah,09h
int 21h
jmp lop1
exit:
mov ah,4ch ; 结束程序运行
int 21h
codes ends
end start
阅读全文