汇编X86语言问题

时间:2017-03-09 20:09:09

标签: assembly x86

反向打印一次一个字符的消息 订购。将程序命名为HELLO4.ASM。 (使用“推”和 “流行”

保留另一个保存邮件的变量 使用“push”和“pop”函数反转顺序。然后使用其中任何一个打印此消息 功能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

1 个答案:

答案 0 :(得分:0)

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

 ; (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

在之前的更改之后,它对我起作用并向后显示字符串。