我试图通过在我的 C 代码中调用以下函数来在屏幕上显示字符:
.global _putInMemory
;void putInMemory (int segment, int address, char character)
_putInMemory:
mov bp,sp
push ds
mov ax,[bp+2]
mov si,[bp+4]
mov cl,[bp+6]
mov ds,ax
mov [si],cl
pop ds
ret
像这样:
int segment_start = 0xB000;
putInMemory(segment_start, 0x8140, 'R');
putInMemory(segment_start, 0x8141, 0x1F);
putInMemory(segment_start, 0x8142, 'A');
putInMemory(segment_start, 0x8143, 0x1F);
但是,这只显示没有颜色的第一个字母,但是当我在这样的代码中指定它时,它工作得很好:
putInMemory(0xB000, 0x8140, 'R');
putInMemory(0xB000, 0x8141, 0x1F);
putInMemory(0xB000, 0x8142, 'A');
putInMemory(0xB000, 0x8143, 0x1F);
如果我将 int 存储在变量中,我不明白为什么它不起作用。是不是int
太小了?我正在使用bcc
编译器
编辑: 正确的代码是这样的:
;void putInMemory (int segment, int address, char character)
_putInMemory:
push bp
mov bp,sp
push ds
mov ax,[bp+4]
mov si,[bp+6]
mov cl,[bp+8]
mov ds,ax
mov [si],cl
pop ds
pop bp
ret