我的信息来自这里。该任务要求编写一个程序,最多读取20个字符,将这些字符转换为大写,并以大写形式打印输入。
我不知道如何从int21 / AH = 0ah访问输入。除非我理解了上面的链接,否则我无法提出更精确的问题。有人能解释一下吗?另外,我正在使用TASM,如果有任何区别,请告诉我。另外,我在freedos上测试此功能。
更新1:
好的,感谢您的帮助,我相信我现在理解了中断的设置和行为。
设置: 我必须指定我希望缓冲区存在的ds:dx
我必须将ds:dx设置为20(这将设置缓冲区可以容纳的最大字符数)
我必须将ds:dx + 1设置为0(我认为这样设置了要读取的最小字符数)
实际调用int21 / AH = 0ah,它将进入ds:dx并解释预设字节。它会停止程序,同时等待输入
int21 / AH = 0ah将从ds:dx + 2 + n填充我的输入(其中n是包括'\r'的输入字符数)
现在我的问题是,我该如何做到这一点。我刚刚再次浏览了x86汇编语言参考文献,但还没有找到有用的信息。
我目前的代码:
assume cs:code,ds:code
code segment
start:
mov ax,code ;moves code segment into reg AX
mov ds,ax ;makes ds point to code segment
mov ah,0ah
int 21h
mov ax,1234h ;breakpoint
mov ah,9
mov dx,offset message
int 21h
endNow:
;;;;;;;;;;ends program;;;;;;;;;;
mov ah,0 ;terminate program
int 21h ;program ends
message db 'Hello world!!!',13,10,'$'
code ends
end start
mov dx,offset buffer
而不是mov dx,offset bufferSize
吗?为什么前两个字节显示垃圾值?这是否意味着如果我要读取9个字符(包括字符串终止符),我必须再添加2个字符(前2个垃圾值)9 + 2 = 11个字节? - Ahtisham