我写了以下代码:
.386
.model small
.stack 100h
.data
text db "Paper",0
.code
start :
lea dx , text
mov ah , 9h
int 21h
mov ah , 4ch
int 21h
end start
end
问题是它显示了中间正确句子的奇怪字符,究竟是什么问题?
答案 0 :(得分:3)
; your code
start:
mov ax, @data
mov ds, ax
;your code
我认为这会解决你的问题。 Dos,在加载.com文件时,设置cs
= ds
= es
。当加载.exe格式时cs
指向您的代码时不是这样,当然,ds
(和es
?)指向您的PSP(程序段前缀),这是通常不是您的数据存在的地方......您必须自己设置ds
(如果您打算使用es
)。
“为什么学习16位汇编?”是一个很好的问题。 “为什么要学习装配?”是另一个好问题。有可能你永远不会写任何“严肃”的东西。但它允许您以HLL不会的方式了解“引擎盖下”的内容,16位允许您了解分段内存模型。 32位代码也是分段的,但是当段“不同”时,它们通常指向相同的内存,你通常可以忽略它们 - 操作系统会为你完成所有这些。
此外,我们中的一些人疯狂到认为它很有趣!