Assembly 汇编X86语言问题

Assembly 汇编X86语言问题,assembly,x86,Assembly,X86,以相反的顺序一次打印一个字符 秩序。将程序命名为HELLO4.ASM。(使用“推”和 “流行音乐” 保留另一个变量,该变量将保存消息 使用“推送”和“弹出”功能反转顺序。然后使用 函数9或函数40h。将此程序命名为HELLO5.ASM 这是我关于汇编语言的作业,这是我目前正在做的工作,但它不是相反的 ; (Hello4) .386 .model flat,stdcall .stack 4096 .data aName BYTE "Hello, DOS Here!$" nameSize

以相反的顺序一次打印一个字符 秩序。将程序命名为HELLO4.ASM。(使用“推”和 “流行音乐”

保留另一个变量,该变量将保存消息 使用“推送”和“弹出”功能反转顺序。然后使用 函数9或函数40h。将此程序命名为HELLO5.ASM

这是我关于汇编语言的作业,这是我目前正在做的工作,但它不是相反的

    ; (Hello4)

.386
.model flat,stdcall
.stack 4096

.data
aName BYTE "Hello, DOS Here!$"
nameSize = ($ - aName) - 1

.code
main PROC
    mov ecx,nameSize
    esi,0
L1: movzx eax,aName[esi]
    push eax
    inc esi 
    loop L1

    mov ecx,nameSize
    esi,0
L2: pop eax
    mov aName[esi],al
    inc esi
    loop L2
    mov ah,9
    int 21h


main ENDP
end main

尝试修复代码中的一些OOP并手动初始化数据段:

 ; (Hello4)

.386
.model flat,stdcall
.stack 4096

.data
aName BYTE "Hello, DOS Here!$"
nameSize = ($ - aName) - 1

.code
main PROC
    mov ax,@data          ;◄■■ INITIALIZE DATA
    mov ds,ax             ;◄■■ SEGMENT MANUALLY.
    mov ecx,nameSize
    esi,0                 ;◄■■ MOV ESI,0
L1: movzx eax,aName[esi]
    push eax
    inc esi 
    loop L1

    mov ecx,nameSize
    esi,0                 ;◄■■ MOV ESI,0
L2: pop eax
    mov aName[esi],al
    inc esi
    loop L2
    mov ah,9
    int 21h


main ENDP
end main
在之前的更改之后,它对我有效,并向后显示字符串