汇编新手,要求从键盘输入5条数据信息存储在数据区message;然后从键盘接收 1-5 的数字,显示相应的信息。
在数据区定义msg0-msg9十条信息,从键盘中输入0-9,输出相应的信息。;定制显示字符串的宏
say macro msg
push ax
push dx
mov dx,offset msg
mov ah,9
int 21h
pop dx
pop ax
endm
;定制堆栈段
stack segment stack
db 64 dup(0)
stack ends
;定制数据段
data segment
;定制十条信息
msg0 db '0. File',13,10,36
msg1 db '1. Eidt',13,10,36
msg2 db '2. Search',13,10,36
msg3 db '3. Cat',13,10,36
msg4 db '4. Copy',13,10,36
msg5 db '5. Paste',13,10,36
msg6 db '6. Select',13,10,36
msg7 db '7. Del',13,10,36
msg8 db '8. List',13,10,36
msg9 db '9. Exit',13,10,36
;定制十条信息的指针数组
index dw msg0,msg1,msg2,msg3,msg4,msg5,msg6,msg7,msg8,msg9
;定制一条关于输入的提示信息:
msg db 'Input a number please. (Enter ==> exit.)',13,10,36
;定制一条关于结束的提示信息:
goodbye db '====Goodbye!====$'
data ends
;编写代码段
code segment
assume cs:code,ds:data,ss:stack
start:
;初始化数据段
mov ax,data
mov ds,ax
next:
;显示提示信息:
say msg
;调用DOS中断,接收用户的输入
mov ah,7
int 21h ;接收的数据在al中
;如果输入的是回车键,则退出
cmp al,13
jz exit
;al从键盘接收的码是数字字符的ASCII码
;必须把它转换为对应的数:
sub al,'0'
;如果用户输入的不是0到9的数字键,则跳过:
cmp al,9
ja invalid
;否则,就将该数变换为index数组元素的下标
shl al,1
xor ah,ah
mov si,ax
;根据下标si,从index指针数组中装载相关信息的首地址给DX,
;并调用DOS中断,显示之
mov dx,index[si]
mov ah,9
int 21h
invalid:
jmp next ;再选择下一个
exit: ;返回DOS
say goodbye
mov ax,4c00h
int 21h
code ends
end start
但是现在要求从键盘输入5条数据信息存储在数据区message;然后从键盘接收 1-5 的数字,显示相应的信息。这样一转变,工作量大了不少,从键盘录入信息,要用dw,问题是怎么将他们排序,还要按1-5的数字对应显示,怎么将他们串联起来,试了很多次,出错了好多次,不知道怎么办了。