用汇编编程一程序,在屏幕上显示如下图案: ******* ***** *** * 其中第一行“*”的个数由键盘输入数据指定(1~9),若输入的数据是偶数则加1形成奇数。
时间: 2023-11-19 10:07:17 浏览: 109
这个问题需要用到汇编语言编写程序,以下是实现该功能的汇编代码:
```
.model small
.stack 100h
.data
num db ?
.code
mov ax, @data
mov ds, ax
mov ah, 01h ; 从键盘读入一个字符
int 21h
sub al, 30h ; 将字符转换为数字
cmp al, 0 ; 判断输入是否为0
je exit
cmp al, 9 ; 判断输入是否大于9
ja exit
cmp al, 1 ; 判断输入是否小于1
jb exit
test al, 01h ; 判断输入是否为偶数
jz even
jmp odd
even:
inc al ; 将偶数加1变成奇数
odd:
mov num, al ; 将输入的数字存入变量num中
mov cx, num ; 循环次数为输入的数字
mov si, 0 ; 初始化偏移量
mov di, num ; 初始化星号数量
mov ah, 02h ; 设置光标位置
mov bh, 0 ; 设置显示页
mov dl, '*' ; 设置显示字符
mov dh, 0 ; 第一行
int 10h ; 设置光标位置
inc si ; 偏移量加1
dec di ; 星号数量减1
loop1:
mov ah, 02h ; 设置光标位置
mov dl, ' ' ; 设置显示字符为空格
int 10h ; 设置光标位置
add si, 2 ; 偏移量加2
mov ah, 02h ; 设置光标位置
mov dl, '*' ; 设置显示字符为星号
int 10h ; 设置光标位置
dec di ; 星号数量减1
cmp di, 0 ; 判断星号数量是否为0
jne loop1
mov ah, 02h ; 设置光标位置
mov dl, '*' ; 设置显示字符为星号
int 10h ; 设置光标位置
mov ah, 02h ; 设置光标位置
mov dh, 1 ; 第二行
int 10h ; 设置光标位置
mov cx, num ; 循环次数为输入的数字
mov si, 1 ; 初始化偏移量
mov di, num ; 初始化星号数量
loop2:
mov ah, 02h ; 设置光标位置
mov dl, ' ' ; 设置显示字符为空格
int 10h ; 设置光标位置
add si, 2 ; 偏移量加2
mov ah, 02h ; 设置光标位置
mov dl, '*' ; 设置显示字符为星号
int 10h ; 设置光标位置
dec di ; 星号数量减1
cmp di, 0 ; 判断星号数量是否为0
jne loop2
exit:
mov ah, 4ch ; 退出程序
int 21h
end
```
阅读全文