用汇编语言实现从键盘输入一个二位十进制的月份数,然后显示出相应的英文缩写名;
时间: 2024-02-05 07:12:36 浏览: 116
机器语言与汇编语言高级程序设计语言.pptx
以下是汇编语言实现从键盘输入月份数并显示对应英文缩写名的代码:
```
section .data
month db 0
jan db 'Jan'
feb db 'Feb'
mar db 'Mar'
apr db 'Apr'
may db 'May'
jun db 'Jun'
jul db 'Jul'
aug db 'Aug'
sep db 'Sep'
oct db 'Oct'
nov db 'Nov'
dec db 'Dec'
section .text
global _start
_start:
; 读取月份数
mov eax, 3 ; 系统调用号 3 表示读取
mov ebx, 0 ; 标准输入设备为 0
mov ecx, month ; 缓冲区
mov edx, 2 ; 读取 2 个字节
int 0x80
; 将输入的月份数转换为十进制数
sub byte [month], '0' ; 十位数
sub byte [month + 1], '0' ; 个位数
movzx eax, byte [month]
movzx ebx, byte [month + 1]
imul eax, 10
add eax, ebx
; 显示对应的英文缩写名
cmp eax, 1
je .jan
cmp eax, 2
je .feb
cmp eax, 3
je .mar
cmp eax, 4
je .apr
cmp eax, 5
je .may
cmp eax, 6
je .jun
cmp eax, 7
je .jul
cmp eax, 8
je .aug
cmp eax, 9
je .sep
cmp eax, 10
je .oct
cmp eax, 11
je .nov
cmp eax, 12
je .dec
; 如果输入的月份数不在 1~12 的范围内,则显示错误信息
mov eax, 4 ; 系统调用号 4 表示显示
mov ebx, 1 ; 标准输出设备为 1
mov ecx, errmsg ; 错误消息
mov edx, errmsglen ; 消息长度
int 0x80
; 退出程序
mov eax, 1 ; 系统调用号 1 表示退出
xor ebx, ebx ; 返回码为 0
int 0x80
.jan:
mov eax, 4 ; 系统调用号 4 表示显示
mov ebx, 1 ; 标准输出设备为 1
mov ecx, jan ; 缩写名
mov edx, 3 ; 缩写名长度
int 0x80
jmp .exit
.feb:
mov eax, 4 ; 系统调用号 4 表示显示
mov ebx, 1 ; 标准输出设备为 1
mov ecx, feb ; 缩写名
mov edx, 3 ; 缩写名长度
int 0x80
jmp .exit
.mar:
mov eax, 4 ; 系统调用号 4 表示显示
mov ebx, 1 ; 标准输出设备为 1
mov ecx, mar ; 缩写名
mov edx, 3 ; 缩写名长度
int 0x80
jmp .exit
.apr:
mov eax, 4 ; 系统调用号 4 表示显示
mov ebx, 1 ; 标准输出设备为 1
mov ecx, apr ; 缩写名
mov edx, 3 ; 缩写名长度
int 0x80
jmp .exit
.may:
mov eax, 4 ; 系统调用号 4 表示显示
mov ebx, 1 ; 标准输出设备为 1
mov ecx, may ; 缩写名
mov edx, 3 ; 缩写名长度
int 0x80
jmp .exit
.jun:
mov eax, 4 ; 系统调用号 4 表示显示
mov ebx, 1 ; 标准输出设备为 1
mov ecx, jun ; 缩写名
mov edx, 3 ; 缩写名长度
int 0x80
jmp .exit
.jul:
mov eax, 4 ; 系统调用号 4 表示显示
mov ebx, 1 ; 标准输出设备为 1
mov ecx, jul ; 缩写名
mov edx, 3 ; 缩写名长度
int 0x80
jmp .exit
.aug:
mov eax, 4 ; 系统调用号 4 表示显示
mov ebx, 1 ; 标准输出设备为 1
mov ecx, aug ; 缩写名
mov edx, 3 ; 缩写名长度
int 0x80
jmp .exit
.sep:
mov eax, 4 ; 系统调用号 4 表示显示
mov ebx, 1 ; 标准输出设备为 1
mov ecx, sep ; 缩写名
mov edx, 3 ; 缩写名长度
int 0x80
jmp .exit
.oct:
mov eax, 4 ; 系统调用号 4 表示显示
mov ebx, 1 ; 标准输出设备为 1
mov ecx, oct ; 缩写名
mov edx, 3 ; 缩写名长度
int 0x80
jmp .exit
.nov:
mov eax, 4 ; 系统调用号 4 表示显示
mov ebx, 1 ; 标准输出设备为 1
mov ecx, nov ; 缩写名
mov edx, 3 ; 缩写名长度
int 0x80
jmp .exit
.dec:
mov eax, 4 ; 系统调用号 4 表示显示
mov ebx, 1 ; 标准输出设备为 1
mov ecx, dec ; 缩写名
mov edx, 3 ; 缩写名长度
int 0x80
.exit:
; 退出程序
mov eax, 1 ; 系统调用号 1 表示退出
xor ebx, ebx ; 返回码为 0
int 0x80
section .data
errmsg db 'Error: Invalid month number!', 0x0a ; 错误消息
errmsglen equ $ - errmsg ; 消息长度
```
该程序使用系统调用读取键盘输入的月份数,并将其转换为十进制数。然后,根据输入的月份数,使用比较和跳转指令来显示对应的英文缩写名。如果输入的月份数不在 1~12 的范围内,则显示错误消息。最后,程序使用系统调用退出。
阅读全文