简体   繁体   中英

Printing a new line in assembly language with MS-DOS int 21h system calls

I've been trying to print a new line while also printing the alphabet using assembly language in nasmide for the past few days and can't get it, what I've tried so far has either printed nothing, printed just A or printed a multitude of symbols, Google hasn't been helpful to me so I decided to post here.

My code so far is

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

Code for printing new line

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

ascii ---> 10 New Line

ascii ---> 13 Carriage Return

That is code in assembly for new line, code is inspirated with writing machine. Our professor told us the story but I'm not good at english.

Cheers :)

Well, first off:

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

Isn't going to do you any good. You load 0Dh into DL and then immediately overwrite it with 0Ah without ever having used the first value... You need to make your call (int 21h) on BOTH characters...

Furthermore, you're using DL for newlines overwrites the prior use for the character... You need to save and restore that value as necessary.

100% works.

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

you could just use the

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

but declare it as a proc at the bottom of your "main endp" you can name that function newline and call it where ever you need a newline

Mov Ah,02
Mov dl,42
Int 21
Mov dl,0a ---> next line 
Int 21
Mov dl,43
Int 21

Output: 
B
C
mov dl, 0a
int 21h
int 0ah

try this

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM