- [springaccount] 请问下我虚拟机安装完毕后怎么还不行调试哦 能否请大虾给个完整的调试过程呢 谢拉 03/31 20:25
- [michael1947] 一个软盘怎么分的A和B,我知道0面为A,1面为B,可是怎么让DOS系统知道啊,我这里输入B:,就提示 03/05 17:13
- [游客] 我按照你说的帖子用bochs模拟了dos,然后就不知道该干什么了。。。。。。到底应该如何验证啊?怎么 12/24 15:36
- [游客] 花了8天60+小时,中间的曲折和艰辛实在是。。。不过还好我挺过来了,一直一直没有放弃,我坚信付出总会 07/14 13:39
- [游客] 因为nochar 就表示非ASCII键 即没有对应ASCII的键盘输入 所以我用扫描码来判断 06/30 14:19
- [游客] 我觉得你的程序没有什么逻辑上的问题啊。出现了你的错误提示,说明这个输入的字符ascii码小于20H, 06/30 11:53
- [游客] 嗯。我觉得,不能in 16H等待键盘输入,别的就不能运行了不是,所以,肯定应该开中断的。 06/23 15:32
- [zhenglxd] 回楼上的这个 out of range是我自己设计的,如果当ah>3 或者al>7 就会提示out 06/23 09:47
- [游客] 功能设计的不错。不过在运行过程中,设置完背景色后,就会出错退出。博主自己在检查一下。在command 06/20 12:05
- [游客] 苍天弄人,亦成人 支持博主 06/19 20:59
[2009-07-01 14:57] 试验17 完成!
;功夫不负有心人啊在http://www.asmedu.net/blog/user/postcontent.jsp?neighborId=13489&kindLevel=1&kindId=17296&postId=23304&readSg=1Id=13489&kindId=17298&postId=23408
;这个模拟器下我终于顺利完成了实验17像最后的课程设计2冲刺如果有不会使用这个模拟器的可以来问我
;虽然应为模拟器的问题浪费过许多时间但是我从来没有想到过要放弃希望大家也不要放弃(ps和我一起学的最后的实验17和课程设计2我发现很多人因为模拟器原因放弃了)还是那句话模拟器的问题有不懂的可以来问我!
;为了验证方便实验17我用把软驱b数据写入软驱a来验证
;分2步进行 1是读软驱b入data 2是把data写入a
assume cs:code
data segment
db 2048 dup (0)
data ends
code segment
start: mov ax,0
mov es,ax
mov word ptr es:[7ch*4],200h
mov word ptr es:[7ch*4+2],0
;写新的7ch入口地址
mov ax,cs
mov ds,ax
mov si,offset int7ch
mov di,200H
mov cx,offset int7chend- offset int7ch
cld
rep movsb
;安装新int7ch中断
mov ax,data
mov es,ax
mov cx,2880
mov si,0
tests: push cx
mov ah,0 ; 0=读
mov dx,si ;0=逻辑扇区号
mov bx,0 ;es:bx 指向存取地址
mov al,1 ;读写扇区数
mov cl,1 ;1=disk b 扇区号
int 7ch
;把diskb从逻辑扇区0~2779数据 写入es:bx
mov ah,1 ; 1=写
mov dx,si ;0=逻辑扇区号
mov bx,0 ;es:bx 指向存取地址
mov al,1 ;读写扇区数
mov cl,0 ;0=disk a
int 7ch
;把es:bx数据 写入 diska的0~2779扇区
pop cx
inc si
loop tests
mov ax,4c00h
int 21h
int7ch:push ax
push dx
push cx
push bx
add ah,2
read: mov bh,ah ;功能号
mov bl,al ;读写扇区数
push bx ;pbx0= 功能号,读写扇区数(ax)
mov bl,cl ;软驱号
mov cx,1440
call divs
mov bh,al ;面号
push bx ;pbx1=软驱号,面号(dx)
mov cx,18
call divs
mov bh,al ;磁道号
inc dl
mov bl,dl ;扇区号
push bx ;pbx2=磁道号,扇区号(cx)
pop cx
pop dx
pop ax
pop bx
int 13h
;输入参数调用 int 13h
pop cx
pop dx
pop ax
iret
divs:mov ax,dx
mov dx,0
div cx
ret
int7chend:nop
code ends
end start
;这个模拟器下我终于顺利完成了实验17像最后的课程设计2冲刺如果有不会使用这个模拟器的可以来问我
;虽然应为模拟器的问题浪费过许多时间但是我从来没有想到过要放弃希望大家也不要放弃(ps和我一起学的最后的实验17和课程设计2我发现很多人因为模拟器原因放弃了)还是那句话模拟器的问题有不懂的可以来问我!
;为了验证方便实验17我用把软驱b数据写入软驱a来验证
;分2步进行 1是读软驱b入data 2是把data写入a
assume cs:code
data segment
db 2048 dup (0)
data ends
code segment
start: mov ax,0
mov es,ax
mov word ptr es:[7ch*4],200h
mov word ptr es:[7ch*4+2],0
;写新的7ch入口地址
mov ax,cs
mov ds,ax
mov si,offset int7ch
mov di,200H
mov cx,offset int7chend- offset int7ch
cld
rep movsb
;安装新int7ch中断
mov ax,data
mov es,ax
mov cx,2880
mov si,0
tests: push cx
mov ah,0 ; 0=读
mov dx,si ;0=逻辑扇区号
mov bx,0 ;es:bx 指向存取地址
mov al,1 ;读写扇区数
mov cl,1 ;1=disk b 扇区号
int 7ch
;把diskb从逻辑扇区0~2779数据 写入es:bx
mov ah,1 ; 1=写
mov dx,si ;0=逻辑扇区号
mov bx,0 ;es:bx 指向存取地址
mov al,1 ;读写扇区数
mov cl,0 ;0=disk a
int 7ch
;把es:bx数据 写入 diska的0~2779扇区
pop cx
inc si
loop tests
mov ax,4c00h
int 21h
int7ch:push ax
push dx
push cx
push bx
add ah,2
read: mov bh,ah ;功能号
mov bl,al ;读写扇区数
push bx ;pbx0= 功能号,读写扇区数(ax)
mov bl,cl ;软驱号
mov cx,1440
call divs
mov bh,al ;面号
push bx ;pbx1=软驱号,面号(dx)
mov cx,18
call divs
mov bh,al ;磁道号
inc dl
mov bl,dl ;扇区号
push bx ;pbx2=磁道号,扇区号(cx)
pop cx
pop dx
pop ax
pop bx
int 13h
;输入参数调用 int 13h
pop cx
pop dx
pop ax
iret
divs:mov ax,dx
mov dx,0
div cx
ret
int7chend:nop
code ends
end start
评论次数(2) |
浏览次数(1868) |
类型(汇编作业) |
收藏此文 |
[ 游客 发表于 2009-12-24 15:36 ]
我按照你说的帖子用bochs模拟了dos,然后就不知道该干什么了。。。。。。到底应该如何验证啊?怎么使用这个模拟软件啊
[ michael1947 发表于 2011-03-05 17:13 ]
一个软盘怎么分的A和B,我知道0面为A,1面为B,可是怎么让DOS系统知道啊,我这里输入B:,就提示我插入B盘啊。