汇编语言编程设计输出九九乘法表,从键盘输入选项,查找对应结果并标记输出,数据的
时间: 2024-01-10 08:04:18 浏览: 28
存储使用数组,具体实现如下:
```assembly
.model small
.stack 100h
.data
prompt db "请输入选项(1-9):$"
result db "对应的九九乘法表如下:$"
table db 81 dup('?') ; 9行 x 9列的乘法表,初始值为 '?'
.code
main proc
mov ax, @data
mov ds, ax ; 初始化数据段寄存器
call read_option ; 读取选项
call generate_table ; 生成九九乘法表
call print_result ; 输出结果
mov ah, 4ch
int 21h ; 程序结束,返回操作系统
main endp
; 读取选项
read_option proc
mov ah, 9h
lea dx, prompt
int 21h ; 输出提示信息
mov ah, 1h
int 21h ; 读取一个字符
sub al, '0' ; 将字符转换为数字
mov bl, al ; 保存选项
ret
read_option endp
; 生成九九乘法表
generate_table proc
mov cx, 9 ; 循环次数为 9 次
mov si, 0 ; si 为行号(从 0 开始)
mov di, 0 ; di 为列号(从 0 开始)
loop1:
mov dx, si ; 计算当前行在数组中的偏移量
shl dx, 3 ; 乘以 8,每行有 8 个字节
add dx, di ; 加上当前列在数组中的偏移量
mov byte ptr table[dx], si ; 存储当前行号
inc di ; 列号加 1
cmp di, 9 ; 如果列号已经到达 9,则换行
je newline
jmp continue
newline:
mov di, 0 ; 列号归零
inc si ; 行号加 1
jmp continue
continue:
loop loop1
; 根据选项标记数组中的对应结果
mov cx, 9 ; 循环次数还是 9 次
mov si, 0 ; si 为行号(从 0 开始)
mov di, 0 ; di 为列号(从 0 开始)
loop2:
mov dx, si ; 计算当前行在数组中的偏移量
shl dx, 3 ; 乘以 8,每行有 8 个字节
add dx, di ; 加上当前列在数组中的偏移量
mov al, byte ptr table[dx] ; 取出当前行号
cmp al, bl ; 比较当前行号和选项
je mark_result ; 如果相等,则标记结果
jmp continue2 ; 否则继续循环
mark_result:
mov dx, si ; 计算当前行在数组中的偏移量
shl dx, 3 ; 乘以 8,每行有 8 个字节
add dx, di ; 加上当前列在数组中的偏移量
mov byte ptr table[dx+1], 33h ; 在数组中的对应结果位置打上标记
jmp continue2
continue2:
inc di ; 列号加 1
cmp di, 9 ; 如果列号已经到达 9,则换行
je newline2
jmp loop2
newline2:
mov di, 0 ; 列号归零
inc si ; 行号加 1
jmp loop2
ret
generate_table endp
; 输出结果
print_result proc
mov ah, 9h
lea dx, result
int 21h ; 输出结果提示信息
mov cx, 81 ; 循环次数为 81 次
mov si, 0 ; si 为行号(从 0 开始)
mov di, 0 ; di 为列号(从 0 开始)
loop3:
mov dx, si ; 计算当前行在数组中的偏移量
shl dx, 3 ; 乘以 8,每行有 8 个字节
add dx, di ; 加上当前列在数组中的偏移量
mov dl, byte ptr table[dx] ; 取出当前行号
int 21h ; 输出当前行号
mov dl, 'x' ; 输出乘号
int 21h
mov dl, byte ptr table[dx+1] ; 取出当前列号
int 21h ; 输出当前列号
mov dl, '=' ; 输出等号
int 21h
mov dl, byte ptr table[dx+2] ; 取出乘积的十位
int 21h ; 输出乘积的十位
mov dl, byte ptr table[dx+3] ; 取出乘积的个位
int 21h ; 输出乘积的个位
cmp di, 8 ; 如果列号已经到达 8,则换行
je newline3
mov dl, ',' ; 否则输出逗号
int 21h
jmp continue3
newline3:
mov dl, 0dh ; 输出回车
int 21h
mov dl, 0ah ; 输出换行
int 21h
continue3:
inc di ; 列号加 1
cmp di, 9 ; 如果列号已经到达 9,则换行
je newline4
jmp loop3
newline4:
ret
print_result endp
end main
```
通过该程序,可以实现从键盘输入选项,查找对应的九九乘法表,并在结果中标记出来。