汇编语言(王爽第三版)实验十七

实验十七

这道题我也不知道写的对不对,逻辑上应该没啥问题,但是运行起来好像没效果。

题目和个人思路

安装一个新的int 7ch中断例程,实现通过逻辑扇区号对软盘进行读写。
参数说明:
(1)用ah寄存器传递功能号:0表示读,1表示写。
(2)用dx寄存器传递要读写的扇区的逻辑扇区号。
(3)用es:bx指向存储读出数据或写入数据的内存区。

代码如下:

assume cs:code

code segment
start:
	mov ax,cs
	mov ds,ax
	mov si,offset int7ch
	mov ax,0
	mov es,ax
	mov di,200h
	mov cx,offset int7ch_end - offset int7ch
	cld
	rep movsb
	
	cli
	mov word ptr es:[7ch*4],200h
	mov word ptr es:[7ch*4+2],0
	sti

	mov ax,4c00h
	int 21h
	
;16位除法,dx高位,ax低位,ax商,dx余数
int7ch:
	push cx
	push dx
	push bx
	push ax

	mov ax,dx
	mov dx,0
	mov bx,1440
	div bx
	mov cl,al		;面号,先存在cl中

	mov ax,dx		;dx=rem(逻辑扇区号/1440)
	mov dh,cl		;将暂存在cl中的面号存在dh中
	mov dl,0		;驱动器号,软驱 0

	mov bl,18
	div bl			;div bl=rem((逻辑扇区号/1440)/18)
	mov ch,al		;磁道号。al=int(rem(逻辑扇区号/1440)/18)

	inc ah			;ah=rem(rem(逻辑扇区号/1440)/18)
	mov cl,ah		;扇区号

	pop ax
	push ax
	mov al,0		;读写扇区数
	cmp ah,0
	je read
	cmp ah,1
	je write

read:
	mov ah,2
	jmp short ok
write:
	mov ah,3
	jmp short ok
ok:
	int 13h
	pop ax
	pop bx
	pop dx
	pop cx

	iret
int7ch_end:
	nop

code ends
end start


  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值