我被困在汇编中编写一个循环来读取5个字符并以相反的顺序打印它们

问题描述 投票:0回答:2

.data

.code
main proc

        mov cx,5
        user_input:
        
        mov ah,1h
        int 21h
        push dx
        
        loop user_input
        
        
        mov cx,5
        system_output:
        
        
        mov ah,2h
        int 21h
        pop dx
        
        loop system_output
    
    
    
    endp 

我想编写一个代码,从用户那里获取 5 个数字,并以相反的顺序打印所有五个数字 我的代码

程序获得 5 个数字,但什么也不做并终止。

我仍然无法在 Stack 中找到我的号码, 我把屏幕截图放在下面。

loops assembly dos x86-16
2个回答
4
投票

AH=1
函数为您提供
AL
寄存器中的字符。您应该在第一个循环中使用
push AX
! (而不是
push dx

在第二个循环中,您应该使用

pop DX
before 执行函数
AH=2

最好以以下方式结束你的计划:

mov ax, 4C00h
int 21h

0
投票

.data 部分 name db '你的名字', 0 id db '您的 ID', 0

节.text 全局_开始

_开始: ;将前景色设置为青色 (3),将背景色设置为蓝色 (4) 移动eax,0x4F9A;改变颜色的系统调用 mov ebx, 3 ;前景色(青色) mov ecx, 4 ;背景颜色(蓝色) 整数 0x80 ;调用内核

; Display name
mov eax, 4         ; sys_write system call
mov ebx, 1         ; file descriptor (stdout)
mov ecx, name      ; message address
mov edx, 9         ; message length
int 0x80           ; call the kernel

; Display newline
mov eax, 4         ; sys_write system call
mov ebx, 1         ; file descriptor (stdout)
mov ecx, newline   ; newline address
mov edx, 1         ; newline length
int 0x80           ; call the kernel

; Display ID
mov eax, 4         ; sys_write system call
mov ebx, 1         ; file descriptor (stdout)
mov ecx, id        ; message address
mov edx, 7         ; message length
int 0x80           ; call the kernel

; Exit the program
mov eax, 1         ; sys_exit system call
xor ebx, ebx       ; exit status
int 0x80           ; call the kernel

.data 部分 换行 db 10 ;换行符

© www.soinside.com 2019 - 2024. All rights reserved.