- [gift925] 我靠!安装的时候说是没有安装盘2.明明放在那儿了啊! 09/05 19:36
- [游客] 以.bxrc结尾的文件 07/24 15:06
- [xiaoquan09] #两软盘 floppya: 1_44=DOS71_1.IMG, status=inserted 07/23 16:16
- [xiaoquan09] 谁能教教我啊?!!!!!!!!!!!!!!!!!!!!!!!!!!~~~~~~~~~~~~~~~~~ 07/23 14:15
- [xiaoquan09] 以前的程序写的好好的,就是这个课程设计2,不知道怎么安装DOS,什么虚拟软驱的,?????苦苦苦 07/23 14:11
- [xiaoquan09] 程序写好了,就是不知道怎么安装DOS??? 王爽怎么不写明啊??? 着急,??????????? 07/23 14:08
- [xiaoquan09] 妈的,究竟怎么弄啊? 07/23 14:07
- [xiaoquan09] 第六步的配置信息写在哪里啊???? 07/23 13:42
- [xiaoquan09] 急急急急急,怎么不好下载啊?谁发个给我, xiaoquan09@yeah.net 跪求…………… 07/23 12:25
- [游客] 怎么不好下载啊? 07/22 08:36
- [yc2010] 这个问题是实验16中的代码不懂。 table: dw sub1,sub2,sub3,sub4 09/07 21:26
- [sinawear] BZ想用英语压倒我们. 06/17 00:48
- [znxchenxie] 您好!我按照你说的安装好bochs和msdos后,然后在XP下生成了执行程序(EXE格式),不知道如 12/16 10:19
- [ynxbs] 老哥,给有心带带我,我要学汇编! 学生:张世平 QQ:42872272 2008-9-14 09/13 09:04
[2008-09-17 15:31] 试验 17
assume cs:code
data segment
db 512 dup(0)
data ends
code segment
start:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;安装int 7ch号中断例程
mov ax, cs
mov ds, ax
mov si, offset rwfloppy
mov ax, 0
mov es, ax
mov di, 200h
mov cx, offset rwfloppyend - offset rwfloppy
cld
rep movsb
mov word ptr es:[7ch*4], 200h
mov word ptr es:[7ch*4+2], 0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;测试
mov ax, data
mov es, ax
mov si, 0h
mov di, 0
mov cx, 2880 ;2880个扇区
s:
mov ah, 0 ;读
mov al, 1 ;读入扇区数
mov dl, 0 ;软驱A
mov bx, di ;逻辑扇区号
int 7ch
mov ah, 1 ;写
mov al, 1 ;写入扇区数
mov dl, 1 ;软驱B
mov bx, di ;逻辑扇区号
int 7ch
inc di
loop s
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov ax, 4c00h
int 21h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;功能:使用逻辑扇区号读写软盘
;参数:(ah) = 0 表示读,1 表示写
; (al) = 要读写的扇区数
; (dl) = 驱动器号,0:软盘A,1:软盘B
; (bx) = 要读写的逻辑扇区号
; es:si 指向存储读出数据或写入数据的内存区
rwfloppy: cmp ah, 1
ja ok ;大于1跳出
push bx ;保护bx
push cx ;保护cx
push dx ;保护dx
add ah, 2 ;读或写:0+2 or 1+2
push ax ;保存写入的扇区数和功能号(al)和(ah)
push dx ;保存驱动器号(dl)
mov ax, bx
mov dx, 0
mov bx, 1440
div bx
mov bx, dx ;(bx) = (bx)%1440
pop dx ;恢复驱动器号(dl)
mov dh, al ;面: (dh) = (bx)/1440
mov ax, bx
mov bl, 18
div bl
mov ch, al ;磁道号:(ch) = ((bx)%1440)/18
mov cl, ah
inc cl ;扇区号:(cl) = ((bx)%1440)%18+1
mov bx, si
pop ax
int 13h ;调用bios中断
sub ah, 2 ;恢复ax
pop dx ;恢复dx
pop cx ;恢复cx
pop bx ;恢复bx
ok: iret
rwfloppyend: nop
code ends
end start
data segment
db 512 dup(0)
data ends
code segment
start:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;安装int 7ch号中断例程
mov ax, cs
mov ds, ax
mov si, offset rwfloppy
mov ax, 0
mov es, ax
mov di, 200h
mov cx, offset rwfloppyend - offset rwfloppy
cld
rep movsb
mov word ptr es:[7ch*4], 200h
mov word ptr es:[7ch*4+2], 0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;测试
mov ax, data
mov es, ax
mov si, 0h
mov di, 0
mov cx, 2880 ;2880个扇区
s:
mov ah, 0 ;读
mov al, 1 ;读入扇区数
mov dl, 0 ;软驱A
mov bx, di ;逻辑扇区号
int 7ch
mov ah, 1 ;写
mov al, 1 ;写入扇区数
mov dl, 1 ;软驱B
mov bx, di ;逻辑扇区号
int 7ch
inc di
loop s
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov ax, 4c00h
int 21h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;功能:使用逻辑扇区号读写软盘
;参数:(ah) = 0 表示读,1 表示写
; (al) = 要读写的扇区数
; (dl) = 驱动器号,0:软盘A,1:软盘B
; (bx) = 要读写的逻辑扇区号
; es:si 指向存储读出数据或写入数据的内存区
rwfloppy: cmp ah, 1
ja ok ;大于1跳出
push bx ;保护bx
push cx ;保护cx
push dx ;保护dx
add ah, 2 ;读或写:0+2 or 1+2
push ax ;保存写入的扇区数和功能号(al)和(ah)
push dx ;保存驱动器号(dl)
mov ax, bx
mov dx, 0
mov bx, 1440
div bx
mov bx, dx ;(bx) = (bx)%1440
pop dx ;恢复驱动器号(dl)
mov dh, al ;面: (dh) = (bx)/1440
mov ax, bx
mov bl, 18
div bl
mov ch, al ;磁道号:(ch) = ((bx)%1440)/18
mov cl, ah
inc cl ;扇区号:(cl) = ((bx)%1440)%18+1
mov bx, si
pop ax
int 13h ;调用bios中断
sub ah, 2 ;恢复ax
pop dx ;恢复dx
pop cx ;恢复cx
pop bx ;恢复bx
ok: iret
rwfloppyend: nop
code ends
end start
评论次数(1) |
浏览次数(1146) |
类型(汇编作业) |
收藏此文 |
[ 游客 发表于 2008-09-19 14:55 ]
不错,原来可以这样实验!