fafa想放假 2022-06-06 13:26 采纳率: 66.7%
浏览 72
已结题

关于emu8086中INT 21H/42H中断对文件指针的移动

关于emu8086中INT 21H/42H中断对文件指针的移动

问题遇到的现象和发生背景

在用emu8086,使用 INT 21H/42h中断,移动文件指针,然后对文件进行写操作的时候,发现有时不能移动到我想要的位置。

于是我查找了emu8086的help文档

img

这里说,CX:DX代表我想要文件指针移动到的位置,如果成功,那么DX:AX将是成功移动到的位置

于是我再次运行检查dx:ax,分别给cx、dx赋上我想要的值,运行后检查dx、ax

令cx、dx都等1,执行中断前:

img

执行中断后:

img

即,cx:dx(我想要移动的位置)原本为0001:0001,执行后dx:ax(实际移动的位置)0000:0101;从这里看起来,101=1*100+1,cx:dx=cx 左移八位 再加上dx

再令cx=1,dx=10h,

执行前:

img

执行后:

img

即,cx:dx(我想要移动的位置)为0001:0010,执行后dx:ax(实际移动的位置)0000:1010;这里看起来,1010=1*1000+10,cx:dx=cx左移十二位再加上dx

关于8086里的0000:0000,没记错的话,是前者左移四位,再加后者?

而后我又多测试了几组数据:

cxdxpositiontrue?执行前cx:dx执行后dx:ax
11256+1T0001:00010000:0101
110256+10T0001:000A0000:010A
29512+9T0002:00090000:0209
089h137T0000:00890000:0089
189h4233F0001:00890000:1089
11374233F0001:00890000:1089
110h4112F0001:00100000:1010
0109h16+9F0000:01090000:0019

cx,dx是我给cxdx赋的值,position是执行完成后,实际在文件中,开始写的位置,true代表是否写道了我想要的位置。

问题相关代码,请勿粘贴截图

测试代码很简单,如下,是在写另一个程序时,发现文件指针没能移动到需要的位置,然后做了这个简单的程序来看看情况

; multi-segment executable file template.

data segment
    ; add your data here!
    file db 'C:\input.txt', 0   ;这里的C是emu8086安装目录下,vdrive里的C,不是c盘 
    pkey db "press any key11...$"
ends

stack segment
    dw   128  dup(0)
ends

code segment
start:
; set segment registers:
    mov ax, data
    mov ds, ax
    mov es, ax
    
    ;打开文件,读写
    mov al, 2
    mov dx, offset file
    mov ah, 3dh
    int 21h    
    mov bx, ax
    ;移动文件指针
    mov al, 0
    mov cx, 1  
    mov dx, 10h
    mov ah, 42h
    int 21h
    ;写数据
    mov cx, 16
    mov dx, offset pkey
    mov ah, 40h
    int 21h
            
    lea dx, pkey
    mov ah, 9
    int 21h        ; output string at ds:dx
    
    ; wait for any key....    
    mov ah, 1
    int 21h
    
    mov ax, 4c00h ; exit to operating system.
    int 21h    
ends

end start ; set entry point and stop the assembler.

我不知道是我对cx:dx代表的位置理解错了,还是emu8086有问题,我尝试在masm上运行,更改格式后,成功运行,但是没有输出,也不会在masm调试。

我想要知道到底是什么问题,我能怎样把文件指针移动到我需要的位置?

  • 写回答

3条回答 默认 最新

  • 赵4老师 2022-06-07 10:25
    关注

    在DosBox下测试一下

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月13日
  • 创建了问题 6月6日

悬赏问题

  • ¥15 结构功能耦合指标计算
  • ¥20 visual studio中c语言用ODBC链接SQL SERVER
  • ¥50 AI大模型精调(百度千帆、飞浆)
  • ¥15 非科班怎么跑代码?如何导数据和调参
  • ¥15 福州市的全人群死因监测点死亡原因报表
  • ¥15 Altair EDEM中生成一个颗粒,并且各个方向没有初始速度
  • ¥15 系统2008r2 装机配置推荐一下
  • ¥15 悬赏Python-playwright部署在centos7上
  • ¥15 psoc creator软件有没有人能远程安装啊
  • ¥15 快速扫描算法求解Eikonal方程咨询