Municipality字段打印失败:8086汇编程序输出问题排查
8086汇编程序修复:实现姓名、年龄、居住地的完整输出
问题原因
- 提前返回导致代码未执行:原程序在输出年龄的代码段末尾加了
ret指令,程序执行到这里直接返回,后续输出居住地的代码完全没机会运行。 - 缓冲区名称错误:处理居住地输入的代码里错误引用了未定义的
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
相关产品推荐
相关产品推荐

