⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 来来来,我们一起玩汇编.txt

📁 学习(编程技巧_编程知识_程序代码),是学习编程不可多得的学习精验
💻 TXT
字号:
来来来,我们一起玩汇编
 

--------------------------------------------------------------------------------
 
第八军团 时间:2003-11-29 9:13:58 
   
    在C语言中,一个完整的程序必须有一个main()函数作为程序的入口点,可能拥有一个或多个子函数;可能拥有一个或多个包含文件。虽然不是每个程序都是相同,但所有程序的基本结构都是这样的。 
  在汇编语言中也有类似的基本结构。

  一个汇编程序有至少一个代码段,可能有一个或多个数据段、堆栈段,开始及结束代码,等等。下面我们就来看一下汇编语言的"Hello World!"程序并以此来描述一下汇编语言的基本结构。

01  Data    Segment
02  Msg     DB  "  Hello,World!",13,10,"$"
03  Data    Ends
04  Stack   Segment STACK
05      DW  128 Dup(0)
06  Stacktop:
07  Stack   Ends
08  Code    Segment
09      Assume CS:Code,DS:Data,ES:Data,SS:Stack
10  Start:
11      Mov   AX,Stack
12      Lea   SP,Stacktop
13      Mov   SS,AX
14 
15      Mov   AX,Data
16      Mov   DS,AX
17      Mov   AH,9
18      Lea   DX,offset Msg
19      Int   21H
20 
21      Mov   AX,4c00H
22      Int   21H
23  Code    Ends
24      End   Start


  第一行到第三行定义数据段,在数据段中定义了一个名为Msg的字符串变量。

  第四行到第七行定义堆栈段,堆栈可以保存128个字数据。Segment之后的STACK说明表示该段是堆栈段。最后的StackTop标号表示栈顶的偏移地址

  第八行到第二十三行定义代码段。
  第九行定义各段中的变量、标号所对应的缺省段寄存器。Code段中的标号对应于CS,比如我要在程序中访问Start中的数据,如:Mov EAX,DWORD Ptr Start,编译器就会自动把它编译成:Mov EAX,DWORD Ptr CS:Start。
  第十行定义一个标号,标号一般作为某段程序(子程序、条件处理等等)的入口点,在这个程序中它作为整个程序的入口。
  第十一行到第十六行是初始化代码,首先初始化堆栈段,使SS:SP指向栈顶,然后初始化数据段,使用DS指向程序的数据段。
  第十七行到第十九行才是程序真正做事的部分,调用DOS功能调用在屏幕显示“Hello,World!”。
  第二十行到第二十一行是结束代码,调用DOS功能返回命令行,如果不调用结束代码通常的结果是死机,以前我就经常犯这样的错误,大家要引以为戒啊:)。
    这最后一行呢,是告诉编译器程序已经结束(编译器将不理睬END之后的内容),并且指出程序应该从什么地方开始运行。大家可以把这行中的START去掉然后单步调试一下看看会有什么后果。


  以上就是最常见的汇编程序的格式,希望能让初学者们摆脱一些无谓的死机的困扰。

  明白了吗?
 
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -