汇编语言的源程序运行

用汇编语言写的源程序,再到源程序的运行

汇编:

汇编指令

  • 固定指令:mov ax,4c00h

      		int 21h
    

伪指令文本

段定义:

  • 当一个汇编程序由多个·段组成,这些段被用来存放代码,数据或者栈空间来使用
  • 一个有意义的汇编程序中至少要有一个段,这个段用来存放代码
  • 定义程序中的段:每个段都要有段名
    • 段名 segment——段的开始
    • 。。。
    • 段名——ends–段的结束

end(不是ends)

  • 汇编程序结束标记,若程序的结尾处不加end,编译器在汇编程序时无法知道程序在何处结束

assume(假设:)

  • 含义是假设某一段寄存器和程序用segment+…+ends定义段相关联–assume CS:codesg 指CS寄存器与codesg关联,将定义codesg当作程序代码段使用

汇编程序结构:

debug写入:
  • 用于功能简单,短小,精悍程序
  • 只需要包含汇编指令即可
单独编成源文件在编译成可执行文件:
  • 适用于大程序
  • 要汇编指令,指导编译器工作的伪指令
  • 源文件有一些段构成存放代码,数据或者栈空间

注释:;+注释

常见错误:

  • 语法错误
  • 逻辑错误

源程序的运行

  • *.obj目标文件
  • *.LST列表文件
  • *.CRF交叉引用文件

执行命令:

  • -t分步执行

  • 继续执行:P(proceed):

    • 类似T命令,逐条执行命令,显示结果,但通过子程序中断时,直接执行,然后显示结果
  • 运行命令:G(go):

    • 从指定地址处开始执行程序,直到遇到断点或程序正常结束

[…]和(…)规定和约定:

[…]一个内存单元描述:
  • 内存单元的地址:

    • 段地址
    • 偏移地址
  • 内存单元长度(类型)

(…)–表示一个内存单元或寄存器中的内容(学习方便的约定)

描述对象描述方法描述对象描述方法
ax中内容0010H(ax)=0010H2000:1000内容为0010H(2100H)=0010H
mov ax,[2]功能(ax)=((ds)*16+2)mov [2],ax功能((ds)*16+2=(ax))
add ax,2功能(ax)=(ax)+2add ax,bx功能(ax)=(ax)+(bx)
push ax功能(sp)=(sp)-2,((ss)*16+(sp)=(ax))pop ax功能(ax)=((SS)*16+(sp)),(sp)=(sp)+2

在约定idate表示常量

  • 例如:mov ax,[idate],[idate]可以为[0],[2]等
    • mov ax,idate,idate可以为0,1,2等

loop指令

  • 格式:loop+标号

  • 执行loop指令要进行的操作:

    • (cx)=(cx)-1
    • 判断cx中的值
      • 不为零则转至标号处执行程序
      • 如果为零则不执行
  • 要求:

    • cx中要提前存放一个循环次数,因为(cx)影响着loop指令的执行过程
    • 要定义一个标号

如下例,将数据,代码,栈放入不同的段:

初始化各段寄存器:
  • mov ax,stack
  • mov ss,ax
  • mov sp,20h
  • mov ax,data
  • mov ds,ax
入栈:
  • mov bx,0
  • mov cx,8
  • S:push [bx]
  • add bx,2
  • loop(s)
出栈:
  • mov bx,0
  • mov cx,8
  • S0:pop[bx]
  • add bx,2
  • loop S0
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值