. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->使用BIOS进行键盘输入和磁盘读写
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  不知是否是最简的实验17代码  [待解决] 回复[ 1次 ]   点击[ 664次 ]  
asm_sande
[帖 主]   [ 发表时间:2008-09-21 20:30 ]   [引用]   [回复]   [ top ] 
荣誉值:5
信誉值:0
注册日期:2008-07-04 19:03
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;原题目:传递参数时用BX传两参数出现矛盾.
;;改为由CX传递逻辑扇区号,BX应按INT13H要求
;;做偏移基址使用.

assume cs:sande_code
sande_code segment
start:
  mov ax,0
  mov es,ax
  push cs
  pop ds
  mov di,200h
  mov si,offset in7c_start
  mov cx,offset in7c_end - offset in7c_start
  cld
  rep movsb
  cli
  mov word ptr es:[7ch*4],200h
  mov word ptr es:[7ch*4+2],0
  sti
  jmp in7c_end
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;in7c中断,按逻辑扇区号读写磁盘
;参数:AH 0读盘 1写盘
;     CX 读写逻辑扇区号(改用CX防止ES:BX中的BX不能被传值)
;     ES:BX 指向用于与磁盘交换数据的存诸区
;另:  AL 恒取1,即每次总是读写一个扇区,若每次读写数个扇区
;     则需要可去掉MOV AL,1指令,以AL传读写扇区扇数.但应进
;     行面剩余扇区数是否够读写判断.
in7c_start:
        jmp short sande1
par db 0,0,0,0 ;定义字节变量用于暂存计算结果
sande1:
  cmp cx,2779   ;;检查读写逻辑扇区号CX参数是否合法
  ja over        ;;计算逻辑扇区对应的A驱的 面\道\扇区
  push ax       ;;按INT13H参数要求传值给DH,DL,CH,CL,AL
  mov dx,0
  mov ax,cx
  mov cx,1440
  div cx
  mov cs:par[0],al
  mov ax,dx
  mov cl,18
  div cl
  mov cs:par[1],al
  inc ah
  mov cs:par[2],ah
  pop ax
  mov al,1                  ;;读写一个扇区
  mov dh,cs:par[0]    ;;面
  mov dl,0                  ;;对A驱读写
  mov ch,cs:par[1]    ;;道
  mov cl,cs:par[2]    ;;扇
  cmp ah,1 ;;取功能号完成相应工作.
  ja over
  add ah,2
  int 13h
over:
  iret
in7c_end:
  mov ax,4c00h
  int 21h
sande_code ends
end start
asm_sande
[第1楼]   [ 回复时间:2008-09-21 20:48 ]   [引用]   [回复]   [ top ] 
荣誉值:5
信誉值:0
注册日期:2008-07-04 19:03
测试程序
写盘代码 读显存第一页第3行0列起一个扇区容量的数据内容存入A驱第100号逻辑扇区
mov ax,0b800h
mov es,ax
mov bx,320
mov cx,100
mov ah,1
int 7ch
mov ax,4c00h
int 21h

读盘代码 读A驱第100号逻辑扇区内容至显存第一页第6行0列起
mov ax,0b800h
mov es,ax
mov bx,900
mov cx,100
mov ah,0
int 7ch
mov ax,4c00h
int 21h

在WIN模拟DOS下测试通过呵
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved