实训汇编语言设计——输入1-12 ,显示月份缩写
时间: 2023-10-24 19:05:38 浏览: 82
好的,这个问题可以用汇编语言来解决。下面是一个可能的解决方案,仅供参考。
首先,我们需要定义一个数组,用于存储每个月份的缩写。可以用如下方式定义:
```
months db 'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'
```
接下来,我们需要获取用户输入的数字,可以使用 DOS 中断 21h 中的功能来实现。具体步骤如下:
1. 调用中断 21h 的 01h 功能,显示提示信息 "Please enter a number (1-12): ",并等待用户输入。
2. 调用中断 21h 的 0Ah 功能,将用户输入的字符串读入到一个缓冲区中。
3. 将缓冲区中的字符串转换为数字,并保存到一个寄存器中。
代码如下:
```
mov ah, 09h ; 01h 功能:显示字符串
lea dx, prompt ; 提示信息
int 21h
mov ah, 0Ah ; 0Ah 功能:输入字符串
lea dx, buffer ; 缓冲区
int 21h
mov al, buffer[2] ; 第三个字符是用户输入的数字
sub al, '0' ; 将 ASCII 码转换为数字
```
接下来,我们需要检查用户输入的数字是否在 1-12 的范围内。如果不是,则显示错误信息并退出程序。否则,将对应月份的缩写输出到屏幕上。
代码如下:
```
cmp al, 1
jl error
cmp al, 12
jg error
mov dl, months[al-1] ; 获取对应月份的缩写
mov ah, 02h ; 02h 功能:显示字符
int 21h
mov dl, months[al]
int 21h
mov dl, months[al+1]
int 21h
jmp exit
error:
mov ah, 09h
lea dx, errmsg
int 21h
exit:
mov ah, 4Ch ; 4Ch 功能:退出程序
int 21h
prompt db 'Please enter a number (1-12): $'
buffer db 3, 0
errmsg db 'Invalid input!$'
```
完整代码如下:
```
.model tiny
.code
org 100h
start:
mov ah, 09h ; 01h 功能:显示字符串
lea dx, prompt ; 提示信息
int 21h
mov ah, 0Ah ; 0Ah 功能:输入字符串
lea dx, buffer ; 缓冲区
int 21h
mov al, buffer[2] ; 第三个字符是用户输入的数字
sub al, '0' ; 将 ASCII 码转换为数字
cmp al, 1
jl error
cmp al, 12
jg error
mov dl, months[al-1] ; 获取对应月份的缩写
mov ah, 02h ; 02h 功能:显示字符
int 21h
mov dl, months[al]
int 21h
mov dl, months[al+1]
int 21h
jmp exit
error:
mov ah, 09h
lea dx, errmsg
int 21h
exit:
mov ah, 4Ch ; 4Ch 功能:退出程序
int 21h
prompt db 'Please enter a number (1-12): $'
buffer db 3, 0
errmsg db 'Invalid input!$'
months db 'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'
end start
```