汇编dos中断之键盘输入?

汇编使用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

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注