汇编语言编程设计输出九九乘法表,从键盘输入选项,查找对应结果并标记输出,数据的
时间: 2024-01-08 11:04:04 浏览: 36
存储使用数组。
以下是汇编语言代码:
```
; 定义常量
CR equ 0dh ; 回车符
LF equ 0ah ; 换行符
MAX equ 9 ; 表示的最大数字
; 数据段
data segment
msg1 db '请选择选项:', CR, LF
msg2 db '1. 输出九九乘法表', CR, LF
msg3 db '2. 查找对应结果并标记输出', CR, LF
msg4 db '请选择:', CR, LF
result db MAX+1 dup(MAX+1 dup('?')) ; 存储结果的数组
data ends
; 代码段
code segment
assume cs:code, ds:data
start:
mov ax, data
mov ds, ax ; 初始化数据段寄存器
; 输出菜单
mov ah, 9
lea dx, msg1
int 21h
lea dx, msg2
int 21h
lea dx, msg3
int 21h
lea dx, msg4
int 21h
; 读取选项
mov ah, 1
int 21h
sub al, '0' ; 将字符转换成数字
; 根据选项执行对应操作
cmp al, 1
je output_table
cmp al, 2
je search_result
; 未知选项,重新输入
jmp start
; 输出九九乘法表
output_table:
mov cx, MAX ; 循环计数器
mov di, 0 ; 数组偏移量
outer_loop:
mov bx, 1 ; 乘数
inner_loop:
mov ah, 2
mov dl, ' '
int 21h ; 输出空格
mov dl, bl
int 21h ; 输出乘数
mov dl, '*'
int 21h ; 输出乘号
mov dl, cx
int 21h ; 输出被乘数
mov dl, '='
int 21h ; 输出等号
mov al, bl
mul cx
mov bh, 0
mov bl, 10 ; 除数
div bl ; 算出商和余数
mov bl, ah ; 商存入高位
mov ah, 2
mov dl, al ; 输出低位
int 21h
mov dl, bh ; 输出高位
int 21h
add di, 1 ; 偏移量加1
mov result[di], al ; 保存结果到数组
mov ah, 2
mov dl, ' '
int 21h ; 输出空格
cmp bx, MAX ; 判断是否已经乘到9
je next_line
add bx, 1 ; 乘数加1
jmp inner_loop
next_line:
mov ah, 2
mov dl, CR
int 21h ; 换行
mov ah, 2
mov dl, LF
int 21h
cmp cx, 1 ; 判断是否已经乘到1
je end_proc
sub cx, 1 ; 被乘数减1
jmp outer_loop
; 查找对应结果并标记输出
search_result:
mov cx, MAX ; 循环计数器
mov di, 0 ; 数组偏移量
search_loop:
mov bx, 1 ; 乘数
inner_loop2:
mov al, result[di] ; 从数组中读取结果
cmp al, '?' ; 判断是否已经计算过
je skip_output
mov ah, 2
mov dl, ' '
int 21h ; 输出空格
mov dl, bl
int 21h ; 输出乘数
mov dl, '*'
int 21h ; 输出乘号
mov dl, cx
int 21h ; 输出被乘数
mov dl, '='
int 21h ; 输出等号
mov ah, 2
mov dl, al ; 输出结果
int 21h
skip_output:
add di, 1 ; 偏移量加1
cmp bx, MAX ; 判断是否已经乘到9
je next_line2
add bx, 1 ; 乘数加1
jmp inner_loop2
next_line2:
mov ah, 2
mov dl, CR
int 21h ; 换行
mov ah, 2
mov dl, LF
int 21h
cmp cx, 1 ; 判断是否已经乘到1
je end_proc2
sub cx, 1 ; 被乘数减1
jmp search_loop
end_proc2:
ret
end_proc:
mov ah, 4ch
int 21h ; 返回操作系统
code ends
end start
```