Assembly 基本输入汇编语言
嘿,我已经开始学习汇编语言了 我编写了以下代码: 我正在尝试输入,它是工作的一种,但当我尝试打印它,我没有得到正确的字符串。我用它来选择中断功能 我附加了一个屏幕截图,我已经输入了以下字符串:Assembly 基本输入汇编语言,assembly,input,masm,Assembly,Input,Masm,嘿,我已经开始学习汇编语言了 我编写了以下代码: 我正在尝试输入,它是工作的一种,但当我尝试打印它,我没有得到正确的字符串。我用它来选择中断功能 我附加了一个屏幕截图,我已经输入了以下字符串: Hey this is me taking input 但我得到了意想不到的结果 截图: 问题: 我做错了什么? 在编写汇编程序时,有好的调试器可供使用吗? 有没有好的汇编教程的链接会很好? 谢谢。您没有为输入字符串留出足够的空间;当您声明MSG时,您只给它4个字符的空间Hey$ 注意:使用db Siz
Hey this is me taking input
但我得到了意想不到的结果
截图:
问题:
我做错了什么?
在编写汇编程序时,有好的调试器可供使用吗?
有没有好的汇编教程的链接会很好?
谢谢。您没有为输入字符串留出足够的空间;当您声明MSG时,您只给它4个字符的空间Hey$ 注意:使用db Size dup 0,我们可以占用大小字节数的值
.MODEL SMALL
.STACK 10H
Size = 3
.DATA
M1 db Size ; First character=max length
M2 db ? ; Second char of buffer=length of input
MSG db Size dup (20H) ; Rest of buffer=input string
db 0DH ; followed by carriage return (0Dh)
;---
db "$" ; (allways needed for printing function)
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
MOV AH,0AH ; setting the sub function
MOV DX, offset M1 ; moving address of input buffer
INT 21h ; calling interrupt
MOV AH, 09
MOV DX, OFFSET MSG
INT 21h ; for printing
MOV AH, 04CH ; Select exit function
MOV AL, 00 ; Return 0
INT 21h ; Call Interupt to Terminate program
MAIN ENDP
END MAIN
0a返回输入的缓冲区。字节0=缓冲区可容纳的最大字符数,字节1=上次输入的字符数,字节2+=实际字符数。您正在转储整个缓冲区,包括元数据字节。我如何分别通过0、字节1和字节2+访问?只需使用偏移量msg+2,basically@MarcB我正在使用偏移量msg+2,但仍然得到意外的结果。
.MODEL SMALL
.STACK 10H
Size = 3
.DATA
M1 db Size ; First character=max length
M2 db ? ; Second char of buffer=length of input
MSG db Size dup (20H) ; Rest of buffer=input string
db 0DH ; followed by carriage return (0Dh)
;---
db "$" ; (allways needed for printing function)
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
MOV AH,0AH ; setting the sub function
MOV DX, offset M1 ; moving address of input buffer
INT 21h ; calling interrupt
MOV AH, 09
MOV DX, OFFSET MSG
INT 21h ; for printing
MOV AH, 04CH ; Select exit function
MOV AL, 00 ; Return 0
INT 21h ; Call Interupt to Terminate program
MAIN ENDP
END MAIN