2013-04-05 30 views
-1

我一直在尝试打印一个新行,同时还在过去几天中使用汇编语言在nasmide中打印字母表,并且无法获取它,到目前为止,我尝试过的方法不是什么都不打印,只是打印出A或打印了许多符号,Google对我没有帮助,所以我决定在这里发帖。用MS-DOS int 21h系统调用打印汇编语言的新行

到目前为止我的代码是

CR equ 0DH 
LF equ 0AH 

main: 
mov AH,02H 
mov CX,26 
mov DL, 'A' 

while1: 
cmp DL, 'A' 
add DL, 01H 
int 21H 
mov DL, 0DH 
mov DL, 0AH 
int 21H 
cmp DL, 'Z' 
je Next 
jmp while1 

Next: 
mov AH,4CH 
int 21h 
+0

在你的程序集中使用注释 – Rafael 2016-02-23 00:49:08

回答

2

嗯,首先:

mov DL, 0DH 
mov DL, 0AH 
int 21H 

是不会做你任何好处。您将0Dh加载到DL中,然后立即用0Ah覆盖它,而没有使用第一个值...您需要在两个字符上拨打电话(int 21h)...

此外,您正在使用DL for换行符会覆盖字符的先前使用情况...您需要根据需要保存并恢复该值。

5

代码用于打印新行

MOV dl, 10 
MOV ah, 02h 
INT 21h 
MOV dl, 13 
MOV ah, 02h 
INT 21h 

ASCII ---> 10新线 ASCII ---> 13回车

即在组装新的行代码,代码inspirated与写作机器。 我们的教授告诉我们这个故事,但我不擅长英语。

干杯:)

+5

isn'它先是13,然后是10? CR-LF? – xdevs23 2016-09-14 15:19:53

-2
mov dl, 0a 
int 21h 
int 0ah 

试试这个

+1

你应该解释为什么以及如何解决这个问题。代码片段本身并不是很有用。 – 2016-03-09 10:41:28

0

你可以只使用

mov ah, 02h 
mov dl, 13 
int 21h 
mov dl, 10 
int 21h 
ret 

,但其声明为你的 “主ENDP” 的底部,一个进程可以命名那功能换行并称之为你需要换行的地方