我想在 MIPS 程序集中创建一个程序,它制作并保存一个 1 bpp BMP 文件,其中将使用 Bresenham 算法绘制一个不同半径长度的圆(由用户在控制台上提供)。
目前,我有一个定义明确的 BMP 文件,用于直径的整数值,但是我正在努力解决另外两件事:
- 在位图的右地址绘制像素
- 实施正确的Bresenham 算法一次应用 8 个点
这是我在文本段中负责在正确地址位置绘制像素的代码的一部分:
# $t2 - length of row + padding
# $t3 - initial address of a bitmap (header)
# $t4 - pointer to move values from BMP header parameters onto the heap
.macro drawPixel(%x,%y)
addiu $t4, $t3, 62 # starting address of a pixel map
mult %y, $t2 # pixel y-value multiplied by row length
mflo $a2
addu $t4, $t4, $a2 # y-value pixel address computation
divu $a2, %x, 8 # pixel x-value divided by 8 to obtain number of bytes
addu $t4, $t4, $a2 # x-value pixel address computation
mfhi $a3
#addiu $a3, $a3, -1
li $a2, 1
srlv $a2, $a2, $a3
lb $a3, ($t4) # loading byte at the address of pixel map start (="white" byte)
or $a3, $a3, $a2 # adds a new coloured byte to a "white" byte
sb $a3, ($t4) # loads byte with a coloured pixel
.end_macro
enter code here
下面的部分是一个简单的示例,用于测试目的,显示像素未显示在指定位置:
li $a0, 0
li $a1, 0
drawPixel($a0, $a1)
li $a0, 4
li $a1, 0
drawPixel($a0, $a1)
虽然,我的程序绘制像素,但它们以某种相反的顺序排列。我想知道这是否与 MIPS 程序集中的不同大/小端序有关,如果是,我该如何解决?
非常感谢您的帮助,也许如果您设法在这部分指导我,则不需要关于 Bresenham 算法的第二个问题。