【发布时间】:2023-03-14 01:47:01
【问题描述】:
我正在尝试通过在我的 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
【问题讨论】: