汇编网首页登录博客注册
chinatree的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
友情链接

[2011-09-06 10:57] 第17章实验的验证

图片载入中
在虚拟机中,写了两个程序,一个把数据段定义的512字节的字符串写入软盘,另一个从软盘把它们读出到屏幕:
stack segment
db 32 dup (0)
stack ends
data segment
db 64 dup ('a',2,'b',2,'c',2,'d',2);64*8=512 bytes
data ends
code segment
assume cs:code,ds:code,ss:stack
start:mov ax,stack
mov ss,ax
push cs
pop ds
xor ax,ax
mov es,ax
mov di,200h
mov si,offset int7c
mov cx,offset intend-offset int7c
cld
rep movsb
mov word ptr es:[7ch*4],200h;设置入口地址
mov word ptr es:[7ch*4+2],0
mov ax,data
mov es,ax
xor bx,bx           ;es:bx指向要存的内存区
mov ah,1            ;是写
mov dx,1234       ;逻辑扇区号
int 7ch
mov ax,4c00h
int 21h
int7c:push cx
push ax
mov ax,dx
xor dx,dx
mov cx,1440      ;看下是0面还是1面
div cx
push ax       ;商后面用
mov ax,dx     
mov cl,18      ;余数除以18得到磁道号
div cl
inc ah
mov cl,ah     ;余数+1是扇区
mov ch,al      ;商是磁道
pop ax
mov dh,al    ;这里是面号,因为只有0,1两种状态
xor dl,dl     ;操作的是a盘
pop ax
add ah,2     ;int 13h的功能号是2是读,3是写,所以要加2
mov al,1     ;要操作的扇区数
int 13h
pop cx
iret
intend:nop
code ends
end start          ;这个是写进去


stack segment
db 32 dup (0)
stack ends
code segment
assume cs:code,ds:code,ss:stack
start:mov ax,stack
mov ss,ax
push cs
pop ds
xor ax,ax
mov es,ax
mov di,200h
mov si,offset int7c
mov cx,offset intend-offset int7c
cld
rep movsb
mov word ptr es:[7ch*4],200h;设置入口地址
mov word ptr es:[7ch*4+2],0
mov ax,0b800h       ;写到屏幕
mov es,ax
xor bx,bx           ;es:bx指向要存的内存区
mov ah,0           ;是读
mov dx,1234       ;逻辑扇区号
int 7ch
mov ax,700h        ;暂停一下
int 21h
mov ax,4c00h
int 21h
int7c:push cx
push ax
mov ax,dx
xor dx,dx
mov cx,1440      ;看下是0面还是1面
div cx
push ax       ;商后面用
mov ax,dx     
mov cl,18      ;余数除以18得到磁道号
div cl
inc ah
mov cl,ah     ;余数+1是扇区
mov ch,al      ;商是磁道
pop ax
mov dh,al    ;这里是面号,因为只有0,1两种状态
xor dl,dl     ;操作的是a盘
pop ax
add ah,2     ;int 13h的功能号是2是读,3是写,所以要加2
mov al,1     ;要操作的扇区数
int 13h
pop cx
iret
intend:nop
code ends
end start

结果还是看图吧,事实证明,确实写进虚拟软盘了。
评论次数(5)  |  浏览次数(453)  |  类型(汇编作业) |  收藏此文  | 

[  rotapple   发表于  2011-09-06 11:16  ]

老师不是让把扇区编号写成子程序吗。

[  chinatree   发表于  2011-09-06 11:30  ]

我把它写在7ch中断里了。

[  chinatree   发表于  2011-09-06 12:01  ]

安装一个新的int 7ch中断例程,实现通过逻辑扇区号对软盘进行读写。
这是书上原话,并没有说写成子程序。

[  rotapple   发表于  2011-09-06 14:00  ]

我知道的,我是说一个计算的子程序:
根据逻辑扇区号算出物理编号的这个子程序,后面写课程设计2会方便些。

[  chinatree   发表于  2011-09-06 17:28  ]

嗯好的。

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码