求这个汇编程序的注释,越详细越好,谢啦
linemacrox1,y1,x2,y2,colorlocalxian1,l1,l2movcx,x1movdx,y1movah,0chmoval,color;0fhmov...
line macro x1,y1,x2,y2,color
local xian1,l1,l2
mov cx,x1
mov dx,y1
mov ah,0ch
mov al,color;0fh
mov bh,0
xian1: int 10h
push cx
MOV CX, 9999
LOOP $
pop cx
cmp cx,x2
je l1
inc cx
cmp cx,x2
jne xian1
l1: cmp dx,y2
je l2
inc dx
cmp dx,y2
jne xian1
l2: inc dx
endm
CODES SEGMENT
START:
mov ah,0
mov al,12h ;显示模式
int 10h
mov ah,0bh
mov bh,0
mov bl,3 ;背景色
int 10h
;-------------------------------------
line 200,50,400,50,0fh
;-------------------------------------
line 400,50,400,250,0fh
;-------------------------------------
line 200,250,400,250,0fh
;-------------------------------------
line 200,50,200,250,0fh
mov ah,07h
int 21h
MOV AH,4CH
INT 21H
CODES ENDS
END START 展开
local xian1,l1,l2
mov cx,x1
mov dx,y1
mov ah,0ch
mov al,color;0fh
mov bh,0
xian1: int 10h
push cx
MOV CX, 9999
LOOP $
pop cx
cmp cx,x2
je l1
inc cx
cmp cx,x2
jne xian1
l1: cmp dx,y2
je l2
inc dx
cmp dx,y2
jne xian1
l2: inc dx
endm
CODES SEGMENT
START:
mov ah,0
mov al,12h ;显示模式
int 10h
mov ah,0bh
mov bh,0
mov bl,3 ;背景色
int 10h
;-------------------------------------
line 200,50,400,50,0fh
;-------------------------------------
line 400,50,400,250,0fh
;-------------------------------------
line 200,250,400,250,0fh
;-------------------------------------
line 200,50,200,250,0fh
mov ah,07h
int 21h
MOV AH,4CH
INT 21H
CODES ENDS
END START 展开
1个回答
展开全部
就是一个画直线的程序,楼主想了解清楚,最好熟悉一下汇编的int 10h和int 21h的介绍。
另外根据画线宏的流程,这个宏貌似不是画实际的直线,而是画了两条直线,分别为(x1,y1),(x2,y1)和(x2,y1),(x2,y2)
主程序实际上就是画了一个矩形
line macro x1,y1,x2,y2,color ;定义画直线宏,参数包括起点坐标,终点坐标,颜色
local xian1,l1,l2 ;定义三个变量,实际就是跳转点
mov cx,x1 ;cx设置x坐标,初始化为x1
mov dx,y1 ;dx设置y坐标,初始化为y1
mov ah,0ch ;ah设置为0ch,表示写图形像素
mov al,color ;al设置为color,表示像素值
mov bh,0 ;bh设置为0,表示页码,以上为寄存器赋值,准备调用10h中断画点
xian1: int 10h ;调用10h中断,根据cx,dx,ah,al,bh值画点
push cx
MOV CX, 9999
LOOP $
pop cx ;以上为保存寄存器cx后等待循环,就是每次画一个点等待一段时间,然后恢复cx
cmp cx,x2
je l1
inc cx
cmp cx,x2
jne xian1 ;以上判断x坐标是否等于x2,等于就跳转到l1开始比较y坐标,否则x坐标加1,调用10h中断画点。
l1: cmp dx,y2
je l2
inc dx
cmp dx,y2
jne xian1 ;以上判断y坐标是否等于y2,等于就跳转到l2,否则y坐标加1,调用10h中断画点。
l2: inc dx
endm
CODES SEGMENT
START:
mov ah,0
mov al,12h ;调用10h中断根据ah,al值设置显示模式
int 10h
mov ah,0bh
mov bh,0
mov bl,3 ;调用10h中断根据ah,bh,bl值设置背景色
int 10h
;-------------------------------------
line 200,50,400,50,0fh
;-------------------------------------
line 400,50,400,250,0fh
;-------------------------------------
line 200,250,400,250,0fh
;-------------------------------------
line 200,50,200,250,0fh ;以上调用line宏画了一个矩形
mov ah,07h
int 21h ;调用21h中断等待键盘输入
MOV AH,4CH
INT 21H ;调用21h中断结束程序,以上就是输入任意键退出程序
CODES ENDS
END START
另外根据画线宏的流程,这个宏貌似不是画实际的直线,而是画了两条直线,分别为(x1,y1),(x2,y1)和(x2,y1),(x2,y2)
主程序实际上就是画了一个矩形
line macro x1,y1,x2,y2,color ;定义画直线宏,参数包括起点坐标,终点坐标,颜色
local xian1,l1,l2 ;定义三个变量,实际就是跳转点
mov cx,x1 ;cx设置x坐标,初始化为x1
mov dx,y1 ;dx设置y坐标,初始化为y1
mov ah,0ch ;ah设置为0ch,表示写图形像素
mov al,color ;al设置为color,表示像素值
mov bh,0 ;bh设置为0,表示页码,以上为寄存器赋值,准备调用10h中断画点
xian1: int 10h ;调用10h中断,根据cx,dx,ah,al,bh值画点
push cx
MOV CX, 9999
LOOP $
pop cx ;以上为保存寄存器cx后等待循环,就是每次画一个点等待一段时间,然后恢复cx
cmp cx,x2
je l1
inc cx
cmp cx,x2
jne xian1 ;以上判断x坐标是否等于x2,等于就跳转到l1开始比较y坐标,否则x坐标加1,调用10h中断画点。
l1: cmp dx,y2
je l2
inc dx
cmp dx,y2
jne xian1 ;以上判断y坐标是否等于y2,等于就跳转到l2,否则y坐标加1,调用10h中断画点。
l2: inc dx
endm
CODES SEGMENT
START:
mov ah,0
mov al,12h ;调用10h中断根据ah,al值设置显示模式
int 10h
mov ah,0bh
mov bh,0
mov bl,3 ;调用10h中断根据ah,bh,bl值设置背景色
int 10h
;-------------------------------------
line 200,50,400,50,0fh
;-------------------------------------
line 400,50,400,250,0fh
;-------------------------------------
line 200,250,400,250,0fh
;-------------------------------------
line 200,50,200,250,0fh ;以上调用line宏画了一个矩形
mov ah,07h
int 21h ;调用21h中断等待键盘输入
MOV AH,4CH
INT 21H ;调用21h中断结束程序,以上就是输入任意键退出程序
CODES ENDS
END START
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询