You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Municipality字段打印失败:8086汇编程序输出问题排查

8086汇编程序修复:实现姓名、年龄、居住地的完整输出

问题原因

  1. 提前返回导致代码未执行:原程序在输出年龄的代码段末尾加了ret指令,程序执行到这里直接返回,后续输出居住地的代码完全没机会运行。
  2. 缓冲区名称错误:处理居住地输入的代码里错误引用了未定义的buffer3,实际应该用已定义好的buff缓冲区。

修复后的完整代码

.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
    
    ; 输出居住地信息
    mov ah, 09h
    lea dx, outputMsg3
    int 21h

    mov bl,buff[1]
    mov buff[bx + 2], '$' ; 修正为buff,而非buffer3
    mov dx, offset buff + 2
    mov ah, 9
    int 21h
    
    ret ; 所有输出完成后再返回

MAIN ENDP
END MAIN

修复说明

  • 移除了输出年龄后的ret指令,将唯一的ret放在所有输出逻辑完成之后
  • 将mov buffer3[bx + 2], '$'改为mov buff[bx + 2], '$',匹配定义好的缓冲区名称

内容的提问来源于stack exchange,提问作者John Paulo Pascua

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 20:42:38