我的信息来自这里。该作业要求一个程序读取不超过 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