主世界 2021-06-27 20:21 采纳率: 40%
浏览 21

汇编问题:读取硬盘分区表时报错"非法命令"???

我写了一个读取硬盘主分区表的汇编程序.

但是int 13h执行后总是不成功.

下面是一部分代码(暂不考虑其他代码的原因)

%define PARTION_TABLE_OFFEST		0x1be
%define	PARTION_TABLE_PER_SIZE		16
%define	ACTIVE_PARTION_FALG		0x80
%define OS_LOAD_ADR_BASE		        0x9000
%define OS_LOAD_ADR_OFFEST		0x100	

...

;读取磁盘信息
.load_partions
	;寻找分区
	mov 	bp,BIOS_LOAD_MBR_ADR+PARTION_TABLE_OFFEST	;分区表的开始地址
	mov	cx,0					;分区表的表项序号(0-4)
.search_active_partion
	;寻找活动分区
	cmp	cx,4
	je	.no_active_partion
	mov	al,[bp]
	cmp	al,ACTIVE_PARTION_FALG
	je	.find_active_partion
	add	bp,PARTION_TABLE_PER_SIZE
	inc	cx
	jmp	.search_active_partion
.no_active_partion
	mov	bp,NoActivePartion
	mov	cx,34
	call 	print_str
	jmp	$
.find_active_partion
	;读取分区第一个扇区
	inc	bp
	mov	al,byte[bp]
	mov	byte[bp+0x0f],al;head
	mov	al,byte[bp+1]
	and	al,0x3f
	mov	byte[bp+0x10],al;sector
	mov     al,byte[bp+1]
	shr	al,6
	mov	byte[bp+0x11],al
	mov     al,byte[bp+2]
	mov	byte[bp+0x12],al;cyc
	mov	di,0

	mov     ah,0x00
        mov     dl,0x00
        int     0x13
.read
	cmp	di,5
	je	.load_os_failed
	mov	ax,OS_LOAD_ADR_BASE
	mov	es,ax
	mov	ch,byte[bp+0x12]
	mov	dh,byte[bp+0x0f]
	mov	cl,byte[bp+0x10]
	
	mov	ah,0x02
	mov	al,1
	mov	bx,0
	mov	dl,0x80
	int	0x13
	jc	.r
	jmp	.next
.r
	inc	di
	mov	ah,0x00
	mov	dl,0x00
	int	0x13
	jmp	.read
.load_os_failed
.vga
	mov	al,0x13
	mov	ah,0x00
	int	0x10
	jmp	$
.next
	cmp	byte[OS_LOAD_ADR_BASE],0
	jne	.vga
	jmp	$
...

用qemu调试得到ah错误码是01h:非法命令,为啥亚???

  • 写回答

1条回答 默认 最新

  • 「已注销」 2023-03-16 10:15
    关注

    参考GPT和自己的思路:

    根据你提供的代码,可能是在调用int 0x13时,ah寄存器的值不正确导致的。具体来说,int 0x13的ah寄存器是用于指定所要执行的磁盘操作命令的,而在你的代码中,ah寄存器在读取分区第一个扇区时被设置为0x00,而在读取操作系统时被设置为0x02。因此,你需要检查你的代码,确保ah寄存器在必要时被正确设置。另外,你也可以查阅有关int 0x13命令码的手册资料,以便更好地理解和调试你的代码。

    评论

报告相同问题?

悬赏问题

  • ¥15 在虚拟机中安装flash code
  • ¥15 单片机stm32f10x编写光敏电阻调节3.3伏大功率灯亮度(光强越大灯越暗,白天正常光强灯不亮,使用ADC,PWM等模块)望各位找一下错误或者提供一个可实现功能的代码
  • ¥20 verilog状态机方法流水灯
  • ¥15 pandas代码实现不了意图
  • ¥15 GD32H7 从存储器到外设SPI传输数据无法重复启用DMA
  • ¥25 LT码在高斯信道下的误码率仿真
  • ¥45 渲染完成之后将物体的材质贴图改变,自动化进行这个操作
  • ¥15 yolov5目标检测并显示目标出现的时间或视频帧
  • ¥15 电视版的优酷可以设置电影连续播放吗?
  • ¥50 复现论文;matlab代码编写