有关汇编文件的问题,请各位大神指点一下

m0_37922446 2017-11-15 12:31:05
现在的问题是这样的,我想从键盘输入一个单词,然后在内存中一个已存在的文件verb.txt查询这个单词,若找到则输出该单词,请问各位大神应该怎么实现,实在没有什么思路
...全文
687 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
m0_37922446 2017-11-20
  • 打赏
  • 举报
回复
还可以这样啊,我之前不知道,谢谢了
  • 打赏
  • 举报
回复
你可以先把程序模块化,比如文件操作、串操作功能分别写到单独的汇编文件,假设叫fileop.inc、stringop.inc,然后在主程序中 include fileop.inc include stringop.inc 就可以使用其中函数了 否则像你现在这样写乱成一锅粥,可读性不好。
m0_37922446 2017-11-20
  • 打赏
  • 举报
回复
每行两个单词,用空格隔开,前面是原型,后面是过去式,我现在想在文件中查原型然后输出过去式0.0
  • 打赏
  • 举报
回复
verb.txt的格式是什么,每行一个单词?
zara 2017-11-17
  • 打赏
  • 举报
回复
没看明白后面的操作。
前面,读文件处,按照后面的 bx 和 cx 的比较来看,文件里也是和 int21h 的 0ah 输入的结构,那就无须 10000 字节的空间了,还读入几次,但又没变更地址。这样的设定,就一次读入 2+255 个字节就是了。读入后的个 int21h AH=40 操作何意?
m0_37922446 2017-11-16
  • 打赏
  • 举报
回复
现在键盘输入和文件的打开和读取都已经做好了,主要是不知道文件里的首地址和长度怎么给
m0_37922446 2017-11-16
  • 打赏
  • 举报
回复
DATAS SEGMENT PATHNAME DB'verb.txt',0 STR DB"Please input a word:$" STR1 DB"The past tense of the word is:$" STR2 DB"File not found!$" STR3 DB"OK!$" STR4 DB"Wrong!$" INPROC DB 10000 DUP(?) HANDLE DW 0 BUF DB 20 DB ? DB 20 DUP (?) CRLF DB 0AH,0DH,"$" DATAS ENDS STACKS SEGMENT STACK DB 200 DUP(?) STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS MAIN PROC FAR START: MOV AX,DATAS MOV DS,AX LEA DX,PATHNAME MOV AH,3DH MOV AL,00H INT 21H JNC OPENED LEA DX,STR2 MOV AH,9 INT 21H MOV AH,4CH INT 21H OPENED:MOV [HANDLE],AX MOV BX,[HANDLE] MOV AH,3FH LEA DX,INPROC MOV CX,10000 INT 21H MOV CX,AX MOV AH,40 MOV BX,1 INT 21H CMP CX,10000 JE OPENED FIND: LEA DX,STR MOV AH,9 INT 21H MOV AH,10 LEA DX,BUF INT 21H LEA DX,CRLF MOV AH,9 INT 21H MOV BL,BUF+1 MOV BH,0 LEA SI,BUF+2 LEA DI,INPROC+2 MOV CL,INPROC+1 MOV CH,0 CMP CX,BX JNC GOON LEA DX,STR4 MOV AH,4CH INT 21H GOON: CLD MOV AL,[SI] SCAN: REPNZ SCASB JZ MATCH JMP CHANGE MATCH: INC CX CMP CX,BX JC CHANGE PUSH CX PUSH SI PUSH DI MOV CX,BX DEC DI REPZ CMPSB POP DI POP SI POP CX JZ FOUND JCXZ CHANGE JMP SCAN CHANGE:MOV AL,[SI+BX-1] CMP AL,'e' JZ NEXT CMP AL,'y' JZ NEXT1 CALL PAST FOUND: DEC DI LEA DX,STR3 MOV AH,09H INT 21H MOV BX,[HANDLE] MOV AH,3EH INT 21H NEXT: MOV BYTE PTR[SI+BX],'d' LEA DX,STR1 MOV AH,9 INT 21H MOV DX,SI MOV AH,9 INT 21H MOV AH,4CH INT 21H NEXT1: MOV AL,[SI+BX-2] CMP AL,'a' JNZ NEXT2 CALL PAST NEXT2: MOV AL,[SI+BX-2] CMP AL,'e' JNZ NEXT3 CALL PAST NEXT3: MOV AL,[SI+BX-2] CMP AL,'i' JNZ NEXT4 CALL PAST NEXT4: MOV AL,[SI+BX-2] CMP AL,'o' JNZ NEXT5 CALL PAST NEXT5: MOV AL,[SI+BX-2] CMP AL,'u' JNZ NEXT6 CALL PAST NEXT6: MOV BYTE PTR[SI+BX-1],'i' MOV BYTE PTR[SI+BX],'e' MOV BYTE PTR[SI+BX+1],'d' LEA DX,STR1 MOV AH,9 INT 21H MOV DX,SI MOV AH,9 INT 21H MOV AH,4CH INT 21H PAST PROC MOV BYTE PTR[SI+BX],'e' MOV BYTE PTR[SI+BX+1],'d' LEA DX,STR1 MOV AH,9 INT 21H MOV DX,SI MOV AH,9 INT 21H MOV AH,4CH INT 21H PAST ENDP CODES ENDS END START 这是我的源代码,现在的问题是不管我输入的单词是不是在verb文件中,最终输出的都是调用了change段中的结果,这个是为什么啊
zara 2017-11-16
  • 打赏
  • 举报
回复
最简单的就是用 repe 来进行比较检查吧,没匹配,刚才的指针输入的单词再执行开头,内存里的指向刚才的下一个,继续以输入单词长度搜,直到内存剩下的不够单词长度了。
  • 打赏
  • 举报
回复
基本功能就是:键盘输入、文件打开/读取、串查找。

21,453

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧