汇编使用dos中断键盘输入数据,有2个功能号
- mov ah, 01h ==》输入一个字符,并存储ASCII在al中
- mov ah, 0ah ==》输入一个字符串,并存储ASCII在ds: dx内存地址中
输入一个字符代码调试
Code segment
Assume cs:code
Start:
Mov ah,01h
Int 21h
Mov ah,4ch
Int 21h
Code ends
End start
编译上面的代码,使用debug时,在将执行int 21时使用p命令取代t命令,即可输入,输入一个数如3,那么al的值将会变为33(3的16进制的ASCII就是33)
输入字符串代码调试
Code segment
Assume cs:code
Start:
Mov ah,0ah
Int 21h
Mov ah,4ch
Int 21h
Code ends
End start
使用debug调试上述程序,在执行到int 21时输入p命令
假设输入的是abcde这5个数,输入完毕后查看ds段,第3位开始是61,62,63,64,65(这是16进制的abcde的ASCII对应编码),那么为什么不是从0开始?
在输入字符串时,会在第一个字中存放输入的长度,观察第2位的值确实是05,可重复调试查看结果。
可以明确,输入的值存储的ds寄存器指定的段地址,那么偏移地址呢?通过调试发现是dx,可以通过指定dx偏移地址,比如mov dx, 3