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

igsr9ssn  于 2022-11-13  发布在  其他
关注(0)|答案(7)|浏览(134)

我一直试图打印一个新的行,同时也打印字母表使用汇编语言在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
qvsjd97n

qvsjd97n1#

用于打印新行的代码

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

ascii ---〉10新行
ascii ---〉13回车
这是代码在汇编中的新行,代码的灵感来自于书写机。我们的教授告诉我们的故事,但我不擅长英语。
干杯:)

epfja78i

epfja78i2#

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
ylamdve6

ylamdve63#

首先

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

这对你没有任何好处。你把0Dh加载到DL中,然后立即用0Ah覆盖它,而没有使用第一个值...你需要对两个字符都调用(int 21h)...
此外,您使用DL作为换行符会覆盖该字符以前的用法...您需要根据需要保存和恢复该值。

a2mppw5e

a2mppw5e4#

您可以使用

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

但是在“main endp”的底部将其声明为一个proc,您可以将该函数命名为newline,并在任何需要换行符的地方调用它

yfwxisqw

yfwxisqw5#

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

Output: 
B
C
v2g6jxz6

v2g6jxz66#

.MODEL SMALL;Code model set to small
.STACK 100H ;Stack memory 100H size
.CODE       ;Code starts from here

START:      ;Mark start of code segment

INPUT:      ;Mark input of code segment
MOV AH, 1   ;AH=1,Single key input
INT 21H     ;Input in AL
MOV BL, AL  ;BL=AL, Input in BL

OUTPUT:     ;Mark output of code segment
MOV AH, 2   ;AH=2,Single key output
 
MOV DL, 0AH ;DL=0AH, ASCII for newline
INT 21H     ;Print DL
MOV DL, 0DH ;DL=0DH, ASCII for carriage return
INT 21H     ;Print DL

MOV DL, BL  ;DL=BL,Display the input 
INT 21H     ;Print DL

Exit:       ;Mark exit of code segment
MOV AH, 4CH ;4CH = DOS exit fuction. Handover the control to OS and exit program
INT 21H     ;Invoke the instruction for interrupt where there function needs to be executed
yduiuuwa

yduiuuwa7#

mov dl, 0a
int 21h
int 0ah

试试这个

相关问题