- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在尝试使用 x86 汇编程序使用中点圆算法绘制一个圆,我已经非常接近(我认为),我关注了另一个与此非常相似的问题:
Drawing a circle using 8086 Assembly Language
这有助于解决我遇到的其他问题。然而,我不是很圆,我有基本的形状,但它似乎是凹的。
] 1
我试图复制维基上的 C 代码示例,如下所示:
C:
void drawcircle(int x0, int y0, int radius)
{
int x = radius;
int y = 0;
int err = 0;
while (x >= y)
{
putpixel(x0 + x, y0 + y);
putpixel(x0 + y, y0 + x);
putpixel(x0 - y, y0 + x);
putpixel(x0 - x, y0 + y);
putpixel(x0 - x, y0 - y);
putpixel(x0 - y, y0 - x);
putpixel(x0 + y, y0 - x);
putpixel(x0 + x, y0 - y);
y += 1;
err += 1 + 2*y;
if (2*(err-x) + 1 > 0)
{
x -= 1;
err += 1 - 2*x;
}
}
}
DSEG SEGMENT PARA PUBLIC 'DATA'
Y DW 0
X DW 0
Y_C DW 0
X_C DW 0
E DW 0
DSEG ENDS
CSEG SEGMENT PARA PUBLIC 'CODE'
ASSUME CS:CSEG, DS:DSEG, SS:SSEG
MAIN PROC FAR
PUSH DS
MOV AX,0
PUSH AX
MOV AX,DSEG
MOV DS,AX
;The program begins here.
MOV AH,00H ;Video: 640x480
MOV AL,18
INT 10H
MOV DX,240
MOV CX,320
MOV SI,100
MOV AL,3
CALL CIRCLE
MOV AH,00H
INT 16H
MOV AH,00H
MOV AL,2 ;Reset the screen to normal
INT 10H
RET ;The program ends here.
MAIN ENDP
;--------------------------------------------------------------
; CIRCLE
; Description: Draws a circle
; Input param: DX = CENTER (X)
; CX = CENTER (Y)
; AL = Colour
; SI = radius
; Reg Effected: None
;--------------------------------------------------------------
CIRCLE PROC
PUSH DX
PUSH CX
MOV X,SI
MOV X_C,DX
MOV Y_C,CX
CIR:
MOV DX,X
CMP DX,Y
JNGE FIN_CIR
CALL DRAWCIRCLE
INC Y
PUSH AX
MOV AX,2
MUL Y
INC AX
ADD AX,E
ADD E,AX
SUB AX,X
MOV DX,2
MUL DX
INC AX
CMP AX,0
JG E_CHECK
POP AX
JMP CIR
E_CHECK:
DEC X
MOV AX,X
MUL DX
MOV DX,1
SUB DX,AX
ADD E,DX
POP AX
JMP CIR
FIN_CIR:
POP CX
POP DX
RET
CIRCLE ENDP
;-------------------------------------------------------------
; DRAWCIRCLE
; Description: Draws a circle, using midpoint circle algorithm
; Input params: DX = Row (X)
; CX = Column (Y)
; AL = Colour
; SI = radius
; Reg Effected: None
;--------------------------------------------------------------
DRAWCIRCLE PROC
PUSH DX
PUSH CX
MOV DX,X_C
MOV CX,Y_C
ADD DX,X
ADD CX,Y
CALL WRITEPIXEL
MOV DX,X_C
MOV CX,Y_C
ADD DX,Y
ADD CX,X
CALL WRITEPIXEL
MOV DX,X_C
SUB DX,Y
CALL WRITEPIXEL
MOV DX,X_C
MOV CX,Y_C
SUB DX,X
ADD CX,Y
CALL WRITEPIXEL
MOV CX,Y_C
SUB CX,Y
CALL WRITEPIXEL
MOV DX,X_C
MOV CX,Y_C
SUB DX,Y
SUB CX,X
CALL WRITEPIXEL
MOV DX,X_C
ADD DX,Y
CALL WRITEPIXEL
MOV DX,X_C
MOV CX,Y_C
ADD DX,X
SUB CX,Y
CALL WRITEPIXEL
POP CX
POP DX
RET
DRAWCIRCLE ENDP
最佳答案
以下几行似乎不等于 C 代码:
MOV AX,2
MUL Y
INC AX
ADD AX,E <- After this AX = err+2*y+1
ADD E,AX <- Now you do: err += err+2*y+1
ADD E,AX
来自
MOV E,AX
.
...
MOV DX,2
MUL DX <- This instruction "destroys" DX!
...
E_CHECK:
DEC X
MOV AX,X
MUL DX <- DX is no longer 2 here
MOV DX,2
之前
MUL DX
.
ADD AX,AX
可以更有效地完成乘以 2 .
关于assembly - x86汇编语言中点圆算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40695745/
我需要你的帮助!我在它们之间放置了随机数量的 div。 Item description Item description Item description Item
我有两个 NSDates,时间格式为“h:mm a”(即 6:00 AM 和 8:00 PM)。 我试图找出这两个时间之间的中点是什么时间。 对于上面的示例,早上 6:00 和晚上 8:00 之间的中
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 8 年前。 Improve th
我正在寻找一种有效的算法来检查一个点是否在 3D 中的另一个点附近。 sqrt((x2-x1)^2 + (y2-y1)^2 + (z2-z1)^2) < radius 这似乎并不太快,实际上我不需要这
我可以让 pandas cut/qcut 函数返回 bin 端点或 bin 中点而不是一串 bin 标签吗? 目前 pd.cut(pd.Series(np.arange(11)), bins = 5)
我是一名优秀的程序员,十分优秀!