使用MS-DOS int 21h系统调用以汇编语言打印新行

时间:2013-04-05 11:34:06

标签: assembly x86 dos

我一直在尝试打印一条新线,同时在过去的几天里使用汇编语言在nasmide打印字母表并且无法得到它,到目前为止我已经尝试过什么都没有打印,只打印A或者打印了许多符号,谷歌对我没有帮助,所以我决定在这里发帖。

到目前为止,我的代码是

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

6 个答案:

答案 0 :(得分:7)

打印新行的代码

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

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

这是新行的汇编代码,代码是用写机启发的。 我们的教授告诉我们这个故事,但我不擅长英语。

干杯:)

答案 1 :(得分:2)

嗯,先关闭:

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

不会对你有任何好处。你将0Dh加载到DL然后立即用0Ah覆盖它而没有使用第一个值...你需要在两个字符上进行调用(int 21h)......

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

答案 2 :(得分:1)

100%有效。

CR equ 0DH
LF equ 0AH

main: 
    mov DL, 'A'

while1:
    mov AH,02H      ;print character
    int 21H 

    mov BL, DL      ;store the value of DL before using DL for print new line

    mov DL, 10      ;printing new line
    mov AH, 02h
    int 21h
    mov DL, 13
    mov AH, 02h
    int 21h

    mov DL, BL      ;return the value to DL

    cmp DL, 'Z'
    je exit 
    add DL, 1       ;store in DL the next character
    jmp while1

exit:
    mov AH,4CH
    int 21h

答案 3 :(得分:0)

你可以使用

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

但是在你的"主要的endp"的底部声明它为proc。您可以将该功能命名为换行符,并在需要换行符的地方调用它

答案 4 :(得分:0)

struct base1 { int b1, b2 = 42; };
struct base2 {
  base2() {
   b3 = 42;
 }
 int b3;
};

struct derived : base1, base2 {
 int d;
};

derived d1{{1, 2}, {}, 4};
derived d2{{}, {}, 4};

答案 5 :(得分:-3)

mov dl, 0a
int 21h
int 0ah

试试这个