x86汇编引导程序输出字符ASCII值自动减1问题求助
x86引导程序输出字符ASCII值偏小1的排查思路
字符加载/存储的逻辑错误
先检查字符串定义:如果你的字符串是通过计算生成的,或者误写了类似db 'Loading Mio Kernel...'-1这种代码,会直接导致每个字符的ASCII值被减1。另外,读取字符时如果对寄存器做了不必要的减1操作,也会触发这个问题。BIOS打印中断前的寄存器操作失误
x86引导程序打印字符一般靠int 0x10中断,要求把目标ASCII值放到al寄存器里。如果在调用中断前多写了dec al,或者赋值字符时错误地先减了1,比如:mov al, [si] dec al ; 完全多余的操作,直接让字符ASCII减1 mov ah, 0x0E int 0x10这种多余操作就是典型诱因。
字符串读取地址偏移错误
如果你设置的字符串读取起始地址偏了1字节,比如本来该从msg开始读,结果写成了mov si, msg-1,就会读到内存中每个目标字符的前一个字节内容——刚好对应ASCII值减1的情况,自然输出的字符就会提前一位。编码相关的误解(可能性低)
除非你误用了非标准ASCII编码,但你描述的是字母表整体提前一位,所以这个概率极低,优先排查前面的代码逻辑问题。
内容的提问来源于stack exchange,提问作者sanzenyou
相关产品推荐
相关产品推荐

