麻烦请问一下怎么让汇编语言做到类似于c++中的文件流读入写出
汇编语言怎么才能像c++的文件流那样直接从一个文件读入然后放置在汇编程序中对应的寄存器中
例如在汉诺塔问题中:
N:也就是盘子数,bx用来存储N
x:起始轴,所有的盘子最初放在上面,cx用来存储x轴名字
y:中转轴,si用来存储y轴名字
z:目标轴,di用来存储z轴名字
我现在能做到将文件中的一个数读入且放置在bx中,但后面如何读入就难以下手。
2022-11-22 12:48
2022-11-22 12:50
程序代码:
;***************************************************************
main proc far
assume cs:prognam,ds:datarea
start:
;set DS register to current data segment
mov ax,datarea
mov ds,ax
mov es,ax
;MAIN PART OF PROGRAM GOES HERE
;
mov ax,3d00h ;开档只读(read only)
mov dx,offset FileName ;档名
int 21h ;调用DOS
jc exit ;开启错误则离开
mov bx,ax ;取Handle
mov ah,3fh ;读档
mov cx,20 ;长度
mov dx,offset Buffer ;读入地址
int 21h ;调用dos
jc exit ;读取错误则离开
cld ;正向
mov di,offset Buffer ;读入缓冲
mov ax,[di] ;取第一个word
cmp ah,0dh ;是否换行符
jnz @f ;不是
mov ah,'0' ;取代换行符
jmp short next ;跳
@@: xchg ah,al ;若第1行是'12',读入ax后,al=32H,ah=31H,须交换
next: sub ax,3030h ;若'12',读入交换后AX=3132H,减后AX=0102,此即BCD码
aad ;BCD调整,若AX=0102,AAD后,AX=000C
mov UserNumber,ax ;保存
mov bx,0 ;初始化
mov cx,20 ;长度
mov al,0Ah ;换行符
@@:
repnz scasb ;扫瞄ES:DI数组CX次,有否AL,若有AL或CX=0则停
mov ah,[di] ;取换行符后的名称
mov UserName[bx],ah ;存入名称
inc bx ;下一个
cmp bx,3 ;是否3个
jb @b ;未完
xor ax,ax ;AX=0
xor cx,cx ;CX=0
mov cl,UserName ;取第1名称
mov al,UserName+1 ;取第2名称
mov si,ax ;存
mov al,UserName+2 ;取第3名称
mov di,ax ;存
mov bx,UserNumber ;取数目
;
call hanoi ;call HANOI( N,X,Y,Z )
exit:
mov ah,4ch
int 21h
main endp
;***************************************************************
[此贴子已经被作者于2022-11-23 18:45编辑过]
2022-11-22 18:43
2022-11-23 11:24
2022-11-23 18:46