Assembly 汇编中的奇怪字符?
我编写了以下代码:Assembly 汇编中的奇怪字符?,assembly,Assembly,我编写了以下代码: .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 问题是它在中间显示了正确的句子,奇怪的是什么,到底是什么问题? ; your code start: mov ax, @data mov ds,
.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
问题是它在中间显示了正确的句子,奇怪的是什么,到底是什么问题?
; your code
start:
mov ax, @data
mov ds, ax
;your code
我想这会解决你的问题。Dos在加载.com文件时,设置cs
=ds
=es
。加载.exe格式时,当然不是这样的,cs
指向您的代码,但是ds
(和es
?)指向您的PSP(程序段前缀),这通常不是数据所在的位置。。。您必须自己设置ds
(如果要使用它,还必须设置es
)
“为什么要学习16位汇编?”是一个很好的问题。“为什么要学习组装?”是另一个好问题。很可能你永远不会用它写任何“严肃”的东西。但它允许您以HLLs不会的方式了解“引擎盖下”发生的事情,16位允许您理解分段内存模型。32位代码也是分段的,但虽然这些段“不同”,但它们通常指向相同的内存,您通常可以忽略它们-操作系统会为您处理所有这些
此外,我们中的一些人疯狂到认为这很有趣 DS:DX=指向以“$”结尾的字符串的指针我忍不住要问:你为什么要在2013年尝试学习16位汇编?@user22323-这意味着你应该阅读规范。如果不是在编码之前,至少是在编码之后,当事情不正常时。@Per Johansson-因为如果你了解汇编程序,你就有机会理解计算,而且大多数人不会从“战争与和平”开始阅读。@PerJohansson:你仍然可以在32位操作系统中运行16位应用程序,很多人仍然在运行32位Windows XP。有大量优秀的汇编语言教程,学习调用DOS中断是一个很好的开始。否则,您必须学习如何设置堆栈框架等,这是一个更高级的主题。16位ASM是一个很好的学习平台,因为它简单。你可以通过在一开始就设置它们,然后离开它们来避免整个细分市场的事情。非常适合学习。在学习16位之后,移动到32位是相当容易的。