用8086汇编在dosbox环境下编写程序:从键盘输入一个正的奇数,按照值打印出菱形图案,如输入7,则输出如下图案(需有输入错误提示和重新输入的提示) * *** ***** ******* ***** *** *
时间: 2023-12-22 10:05:54 浏览: 101
8086模拟器 练习汇编程序的
以下是用8086汇编在dosbox环境下编写程序的示例,实现从键盘输入一个正的奇数,按照值打印出菱形图案,并包含输入错误提示和重新输入的提示:
```assembly
.model small
.stack 100h
.data
prompt1 db 0ah, "Please enter a positive odd number: $"
prompt2 db 0ah, "Invalid input! Please enter a positive odd number: $"
diamond db '*', 0ah
space db ' ', 0ah
newline db 0ah, '$'
input db 3 dup(0)
num dw 0
count dw 0
.code
mov ax, @data
mov ds, ax
; 输出提示信息
mov ah, 9
lea dx, prompt1
int 21h
; 读取用户输入
mov ah, 0ah
lea dx, input
int 21h
; 将用户输入的字符串转换为数字
mov si, offset input + 2
mov cx, 10
xor ax, ax
convert:
lodsb
cmp al, 0dh
je done
sub al, '0'
mul cx
add ax, ax
add ax, ax
add ax, al
jmp convert
done:
mov num, ax
; 检查输入是否为正奇数
mov ax, num
test ax, 1
jz invalid_input
; 打印菱形图案
mov cx, num
mov count, cx
; 上半部分
mov ah, 2
mov dl, ' '
mov bh, 0
mov bl, 7
mov al, count
sub al, 1
shr al, 1
add al, 1
mov cx, ax
rep stosw
mov ah, 9
lea dx, diamond
int 21h
dec count
mov cx, count
mov ah, 2
mov dl, ' '
mov bh, 0
mov bl, 7
rep stosw
mov ah, 9
lea dx, diamond
int 21h
; 下半部分
mov count, num
sub count, ax
mov cx, count
dec cx
mov ah, 2
mov dl, ' '
mov bh, 0
mov bl, 7
rep stosw
mov ah, 9
lea dx, diamond
int 21h
dec count
mov cx, count
mov ah, 2
mov dl, ' '
mov bh, 0
mov bl, 7
rep stosw
mov ah, 9
lea dx, diamond
int 21h
; 输出换行符
mov ah, 9
lea dx, newline
int 21h
; 程序结束
mov ah, 4ch
int 21h
invalid_input:
; 输出错误提示信息
mov ah, 9
lea dx, prompt2
int 21h
; 重新输入
jmp $
end:
mov ax, 4c00h
int 21h
end
```
阅读全文