汇编入门学习笔记 (五)—— 包含多个段的程序

发布者:文江桂青最新更新时间:2016-06-24 来源: eefocus关键字:汇编入门  多个段 手机看文章 扫描二维码
随时随地手机看文章
疯狂的暑假学习之  汇编入门学习笔记 (五)—— 包含多个段的程序

 

参考: 《汇编语言》 王爽 第6章

 

1.在代码中使用数据。

 
  1. assume cs:code  
  2.   
  3. code segment  
  4.   
  5.     dw 0123h,0456h,0789h,0defh  
  6.       
  7.     mov ax,0  
  8.     mov bx,0  
  9.   
  10.     mov ax,4c00H  
  11.     int 21h  
  12.   
  13. code ends  
  14.   
  15. end  

 

dw 表示定义字型数据,db 表示定义字节型数据。

上面代码编译连接,用debug调试,-u cs:0 查看汇编代码,发现没有看到 mov ax,0  mov bx,0 等。直接运行不正常。因计算机不知道那些是数据那些是代码。如果-u cs:8 就可以看到mov ax,0  mov bx,0 等。

正确方法,要加上程序入口

 

  1. assume cs:code  
  2.   
  3. code segment  
  4.   
  5.     dw 0123h,0456h,0789h,0defh  
  6.       
  7. start:  mov ax,0  
  8.     mov bx,0  
  9.   
  10.     mov ax,4c00H  
  11.     int 21h  
  12.   
  13. code ends  
  14.   
  15. end start  

start可以改成其他的名字,只要入口处和end 后面的一样就行了。

 

 

2.在代码中使用栈

 

例子:交换0123H 跟 0456H

dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 申请了栈的空间

sp 30H 设置 栈顶的起始位置

 

  1. assume cs:code  
  2.   
  3. code segment  
  4.     dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h  
  5.     dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0  
  6.       
  7. start:  mov ax,cs  
  8.     mov ss,ax  
  9.     mov sp,30h  
  10.           
  11.     push cs:[0]  
  12.     push cs:[2]  
  13.           
  14.     pop cs:[0]  
  15.     pop cs:[2]  
  16.           
  17.     mov ax,4c00h  
  18.     int 21h  
  19.           
  20. code ends  
  21.   
  22. end start  


 

3.将数据、代码、栈放入不同的段中

 

例子:将数据段中的数据,倒叙存放

  1. assume cs:code,ds:data,ss:stack  
  2.   
  3. data segment  
  4.     dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h  
  5. data ends  
  6.   
  7. stack segment  
  8.     dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0  
  9. stack ends  
  10.   
  11. code segment      
  12.   
  13. start:  mov ax,data  
  14.         mov ds,ax  
  15.         mov ax,stack  
  16.         mov ss,ax  
  17.         mov sp,20h  
  18.           
  19.         mov bx,0  
  20.         mov cx,8  
  21.     s:  push  [bx]  
  22.         add bx,2  
  23.         loop s  
  24.       
  25.         mov bx,0  
  26.         mov cx,8  
  27.     s0: pop  [bx]  
  28.         add bx,2  
  29.         loop s0  
  30.       
  31.           
  32.         mov ax,4c00h  
  33.         int 21h  
  34.           
  35. code ends  
  36.   
  37. end start  

 

这里定义了三个段,数据段,栈段,代码段。ds,ss的值需要在代码段中指定。

关键字:汇编入门  多个段 引用地址:汇编入门学习笔记 (五)—— 包含多个段的程序

上一篇:汇编入门学习笔记 (六)—— si、di,双重循环
下一篇:汇编入门学习笔记 (四)—— [BX] 和 loop指令

推荐阅读最新更新时间:2024-03-16 14:58

汇编入门学习笔记 (十二)—— int指令、端口
疯狂的暑假学习之 汇编入门学习笔记 (十二) int指令、端口 参考: 《汇编语言》 王爽 第13、14章 一、int指令 1. int指令引发的中断 int n指令,相当于引发一个n号中断。 执行过程相当于: (1)取中断类型吗n。 (2)标志寄存器入栈;设置IF=0,TF=0。 (3)CS,IP入栈 (4)(IP)=(n*4),(CS)=(n*4+2) 例子1:编写、安装中断7ch,实现求一个word型数据的平方,用ax存放这个数据。 assume cs:code code segment start: mov ax,cs mov ds,ax mov si,offset sqr mo
[单片机]
ARM汇编语言入门(六)
Part 6:条件状态和分支 在探讨CPSR时我们已经接触了条件状态。我们通过跳转(分支)或者一些只有满足特定条件才执行的指令来控制程序在运行时的执行流。通过CPSR寄存器中的特定bit位来表示条件状态。这些位根据指令每次执行的结果而不断变化。例如,比较运算时如果两个数相等,那么就置CPSR中的Zero位(Z=1),实际上是因为:a - b = 0,这种情况下就是相等状态。如果第一个数大,那么就是大于状态。如果第二个数大,就是小于状态。除此之外,还有小于等于、大于等于等等。 下面的表格列出了可用的条件状态码,描述和标志位: 在下面代码片段中看一下执行条件加法时的实际用法L: .global main main:
[单片机]
ARM<font color='red'>汇编</font>语言<font color='red'>入门</font>(六)
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved