为以下dosbox画圆程序代码添加完整注释,并说明其运行的流程: data segment shuc db 'draw a yuan: $' hua1 db 'input yuanxin and banjing(example:310,220 200): $' zifu db 20 dup(0) shu db 20 dup(0) suan db 24 dup(0) data ends stack segment stk db 16 dup(0) stack ends code segment assume cs:code, ds:data, ss:stack start: mov ax,data mov ds,ax mov ax,stack mov ss,ax mov dx,offset hua1 ; 显示输入圆心和半径的提示字符 call showmsg call input call zhuanshu call moshi mov bx,offset shu mov ax,ds:[bx] mov si,ax mov ax,ds:[bx+2] mov di,ax call drawyuan jmp start ; 重复画圆 input: ; 实现键盘输入字符 mov bx,0 mov cx,20 re: mov ah,1h int 21h cmp al,0dh ; 0dh jz scx mov si,offset zifu mov [bx][si],al inc bx loop re ret scx: ; 条件跳转时对 cx 设置 mov cx,0 ret showmsg: ; 用来显示提示字符 mov ah,9h int 21h ret moshi: ; 屏幕显示模式 mov al,12h mov ah,0 int 10h ret zhuanshu: ; 将输入的 ASCII 码转为数字 mov bx,offset zifu mov bp,offset shu mov cx,16 mov si,0 mov di,0 lei: mov al,ds:[bx][si] cmp al,0 jz scx sub al,30h mov dl,100 mul dl mov word ptr ds:[bp][di],ax mov ax,0 mov al,ds:[bx][si+1] sub al,30h mov dl,10 mul dl add ax,word ptr ds:[bp][di] mov word ptr ds:[bp][di],ax mov ax,0 mov al,ds:[bx][si+2] sub al,30h add ax,word ptr ds:[bp][di] mov word ptr ds:[bp][di],ax add si,4 add di,2 loop lei ret code ends end start
时间: 2024-01-24 22:04:46 浏览: 47
注释如下:
```assembly
data segment
shuc db 'draw a yuan: $' ; 提示字符:绘制圆
hua1 db 'input yuanxin and banjing(example:310,220 200): $' ; 提示字符:输入圆心和半径
zifu db 20 dup(0) ; 存储输入的字符数组
shu db 20 dup(0) ; 存储转换后的数字数组
suan db 24 dup(0) ; 存储计算过程中的数据
data ends
stack segment
stk db 16 dup(0) ; 栈空间
stack ends
code segment
assume cs:code, ds:data, ss:stack
start:
mov ax,data
mov ds,ax ; 初始化数据段
mov ax,stack
mov ss,ax ; 初始化栈段
mov dx,offset hua1 ; 显示输入圆心和半径的提示字符
call showmsg ; 显示提示字符
call input ; 获取用户输入
call zhuanshu ; 将输入的 ASCII 码转为数字
call moshi ; 屏幕显示模式
mov bx,offset shu ; 获取转换后的数字数组
mov ax,ds:[bx]
mov si,ax
mov ax,ds:[bx+2]
mov di,ax
call drawyuan ; 绘制圆
jmp start ; 重复画圆
input:
; 实现键盘输入字符
mov bx,0
mov cx,20
re:
mov ah,1h
int 21h
cmp al,0dh ; 换行符
jz scx
mov si,offset zifu
mov [bx][si],al
inc bx
loop re
ret
scx:
; 条件跳转时对 cx 设置
mov cx,0
ret
showmsg:
; 用来显示提示字符
mov ah,9h
int 21h
ret
moshi:
; 屏幕显示模式
mov al,12h
mov ah,0
int 10h
ret
zhuanshu:
; 将输入的 ASCII 码转为数字
mov bx,offset zifu
mov bp,offset shu
mov cx,16
mov si,0
mov di,0
lei:
mov al,ds:[bx][si]
cmp al,0
jz scx
sub al,30h
mov dl,100
mul dl
mov word ptr ds:[bp][di],ax
mov ax,0
mov al,ds:[bx][si+1]
sub al,30h
mov dl,10
mul dl
add ax,word ptr ds:[bp][di]
mov word ptr ds:[bp][di],ax
mov ax,0
mov al,ds:[bx][si+2]
sub al,30h
add ax,word ptr ds:[bp][di]
mov word ptr ds:[bp][di],ax
add si,4
add di,2
loop lei
ret
code ends
end start
```
该程序的运行流程如下:
1. 程序开始执行后,将数据段和栈段进行初始化。
2. 显示提示字符,要求用户输入圆心坐标和半径长度。
3. 获取用户输入的字符数组。
4. 将输入的字符数组转换为数字数组。
5. 调用绘制圆的函数,并传入圆心坐标和半径长度的参数。
6. 将屏幕显示模式设置为12h。
7. 重复执行步骤2到步骤6,实现多次绘制圆的功能。
8. 程序结束。
需要注意的是,该程序需要在 DOSBox 环境下运行。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)