4

我写了以下代码:

 .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

问题是它显示了奇怪的字符,中间有正确的句子,到底是什么问题?

4

1 回答 1

3
; your code
start:
mov ax, @data
mov ds, ax
;your code

我认为这会解决你的问题。Dos,在加载 .com 文件时,设置cs= ds= es。当然,当加载 .exe 格式cs指向您的代码时,情况并非如此,但是ds(和es?)指向您的 PSP(程序段前缀),这通常不是您的数据所在的位置......您必须设置dses如果你要使用它)你自己。

“为什么要学习 16 位汇编?” 是个好问题。“为什么要学习组装?” 是另一个好问题。你可能永远不会用它写任何“严肃”的东西。但它允许您以 HLL 不会的方式了解“幕后”发生的事情,并且 16 位允许您了解分段内存模型。32 位代码也是分段的,但是虽然这些段是“不同的”,但它们通常指向相同的内存,您通常可以忽略它们 - 操作系统会为您处理所有这些。

此外,我们中的一些人疯狂到认为这很有趣!

于 2013-06-18T01:09:43.600 回答