我是8086汇编语言的初学者 . 我想先尝试一些简单的东西 . 如何写一个程序,输入一个数字,说 x ,将它存储在内存中,然后再加载到寄存器中,然后显示它?
我做了这样的事情:
.MODEL SMALL
.DATA
NL2 DB 0AH,0DH,'Enter a number:','$'
.CODE
MAIN PROC
MOV si, 100d
LEA DX,NL2 ;
MOV AH,09H ;
INT 21H
MOV AH,0AH ; Read into buffer
MOV [si],0AH ; Store in memory
MOV BX,[si] ; load from memory to bx
MOV BX, 09H ; display it
INT 21H
.EXIT
MAIN ENDP
END MAIN
怎么了?请帮我!谢谢!
4 回答
上面的代码有两个错误
$
符号必须在引号中,否则可以生成错误 .在输入后,我们必须在
dl
中al
的值al
,以在屏幕上打印输入的值 .代码中有一些错误 . 要使用DOS函数0Ah(BUFFERED INPUT)输入字符串,我们必须使用输入缓冲区 . 此DOS输入缓冲区的格式如下所示(表01344) .
Ralph Browns x86 / MSDOS中断列表:
http://www.pobox.com/~ralf/files.html
ftp://ftp.cs.cmu.edu/afs/cs.cmu.edu/user/ralf/pub/
为了使用DOS函数09h显示ASCII字符串(来自用户输入),我们必须将缓冲区2的偏移地址输入DX,另外我们必须在调用函数之前在字符串后面放置一个“$” . 可以通过添加上次输入的字符数来计算在字符串后存储“$”的地址 .
如果输入的字节数大于1,则上面的示例更有意义,因此用户可能没有将最大数量的ASCII填充到缓冲区中,因此我们不知道字符串的结尾,所以我们必须从最后一个输入中获取ASCII数 . (但总而言之,我们必须确保缓冲区的尺寸足够大 . )
短剑
这是8086编译器中堆栈的一个例子 . 谢谢