You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现WriteHexBytes子程序 读取扇区并显示指定子程序的机器码

实现方案

1 前置修复:修正现有writeHexByte逻辑

现有writeHexByte仅处理了单个半字节(4位),无法完整输出一个字节的2位十六进制字符,修复后的代码如下:

# 原sector4的writeHexByte替换为以下内容
writeHexByte:
.equ byte, 4
.equ row, 6
.equ col, 8
push %bp
mov %sp, %bp
push %ax
push %bx

# 处理高4位
mov byte(%bp), %al
mov %al, %ah
shr $4, %ah 
push %ah
call convertHexNibble
add $2, %sp
# 输出高半字节
push row(%bp)
push col(%bp)
call moveCursor
add $4, %sp
push %ax
push $0xe3
call displayChar
add $4, %sp

# 处理低4位
and $0x0f, %al
push %al
call convertHexNibble
add $2, %sp
# 输出低半字节,列偏移1位
mov col(%bp), %bx
add $1, %bx
push row(%bp)
push %bx
call moveCursor
add $4, %sp
push %ax
push $0xe3
call displayChar
add $4, %sp

pop %bx
pop %ax
pop %bp
ret
. = writeHexByte + 512

2 调整扇区加载参数

原有引导代码中readSector $4仅加载前4个非引导扇区,新增的WriteHexBytes位于第6扇区,需要将读取扇区数修改为5:

# 引导区_start下的readSector调用修改为
readSector $5

3 实现WriteHexBytes子程序

将以下代码放在convertHexNibble之后的第6扇区,子程序参数约定:调用时从右到左压栈 起始列、起始行、字节长度、内存起始地址:

# Sector 6 新增WriteHexBytes
writeHexBytes:
.equ start_addr, 4
.equ length, 6
.equ start_row, 8
.equ start_col, 10
push %bp
mov %sp, %bp
push %si
push %cx
push %dx
push %bx

mov start_addr(%bp), %si  # 待遍历内存起始地址
mov length(%bp), %cx      # 待输出字节总长度
mov start_row(%bp), %dh   # 显示起始行
mov start_col(%bp), %dl   # 显示起始列

loop_write:
jcxz end_write            # 遍历完成则退出

# 输出当前字节
movb (%si), %al
push %dx
push %dl
push %dh
push %ax
call writeHexByte
add $6, %sp
pop %dx

# 更新显示位置
add $2, %dl
cmp $79, %dl              # 一行80字符,超出则换行
jl next_byte
inc %dh
mov $0, %dl

next_byte:
inc %si
dec %cx
jmp loop_write

end_write:
pop %bx
pop %dx
pop %cx
pop %si
pop %bp
ret
. = writeHexBytes + 512

4 功能测试

在引导代码的cli指令前添加调用代码,即可输出另外两个子程序的机器码:

# 输出moveCursor子程序的机器码,地址0x7e00,长度512,从第2行第0列开始显示
push $0
push $2
push $512
push $0x7e00
call writeHexBytes
add $8, %sp

# 输出displayChar子程序的机器码,地址0x8000,长度512,从第10行第0列开始显示
push $0
push $10
push $512
push $0x8000
call writeHexBytes
add $8, %sp

内容的提问来源于stack exchange,提问作者user7502173

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:36:08