市政府打印失败

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

此代码用于输入姓名年龄和城市。它可以打印出年龄等信息,但市政当局无法打印出该值。

.MODEL SMALL
ORG 100h

.DATA

outmsg db 'Hello User $'  
inputmsg db 0Dh, 0Ah, 'Name: $'  
inputmsg2 db 0Dh, 0Ah, 'Age: $'
inputmsg3 db 0Dh, 0Ah, 'Municipality: $'

outputMsg db 0dh, 0Ah, 'Hello, my name is $'
outputMsg2 db ', i am $'
outputMsg3 db 0dh, 0Ah, 'Years Old. I live in $'
 
buffer db 10, ?, 10 dup(' ') ;Buffer to hold input string
buffer2 db 10, ?, 10 dup(' ') 
buff db 10, ?, 10 dup(' ')

.CODE
MAIN PROC
    MOV AX, @DATA
    MOV DS, AX

    ;display hello world
    mov ah, 09h
    lea dx, outmsg
    int 21h    
    
    mov ah, 09h
    lea dx, inputMsg
    int 21h 
    
    mov dx, offset buffer
    mov ah, 0ah 
    int 21h
    
    mov ah, 09h
    lea dx, inputMsg2
    int 21h 
    
    mov dx, offset buffer2
    mov ah, 0ah
    int 21h
    
    mov ah, 09h
    lea dx, inputMsg3
    int 21h 
    
    mov dx, offset buff
    mov ah, 0ah
    int 21h  
      
    
    mov ah, 09h
    lea dx, outputMsg
    int 21h
    mov bl,buffer[1]
    mov buffer[bx + 2], '$' 
    mov dx, offset buffer + 2
    mov ah, 9
    int 21h 
    
    
    mov ah, 09h
    lea dx, outputMsg2
    int 21h
    mov bl,buffer2[1]
    mov buffer2[bx + 2], '$' 
    mov dx, offset buffer2 + 2
    mov ah, 9
    int 21h
    ret
    
    mov ah, 09h
    lea dx, outputMsg3
    int 21h

    mov bl,buff[1]
    mov buffer3[bx + 2], '$' 
    mov dx, offset buff + 2
    mov ah, 9
    int 21h
    ret
    
    
    

MAIN ENDP
END MAIN

我想打印出三个输入。

assembly input x86-16 emu8086
1个回答
0
投票
.MODEL SMALL
ORG 100h

在定义

.MODEL SMALL
的程序中,不应使用
ORG 100h
指令。该特定指令适合 TINY 内存模型。
要终止您的小程序 (.EXE),请始终使用代码:
mov ax, 4C00h
int 21h
。不要仅使用
ret
,这又只适合 TINY 模型(前提是堆栈没有混乱)。

您看不到显示的市政府,因为在该代码运行之前程序终止了。中间的

ret
指令。

mov bl,buff[1]
mov buffer3[bx + 2], '$'

您不应该依赖 BH 寄存器来保存零!即使在 emu8086 中,这可能是程序启动时的情况,但这通常是不正确的!
正如@Nassau 已经告诉你的,buffer3 是错误的。这应该是 buff 并且 emu8086 应该抱怨未定义的标签。那么它抱怨了吗?

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