汇编(五)

一. 编写一个完整的汇编

  • 汇编语言由2类指令组成:

    assume cs: code
    code segment
    mov ax, 1122h
    mov bx, 3344h
    add ax, bx
    
    mov ah, 4ch
    int 21h
    code ends
    end
    
  • 汇编指令
    movaddsub等有对应的机器指令,可以被编译为机器指令,最终被cpu 执行。

  • 伪指令

assume, segment, ends, end 等没有最终的机器指令,由编译器解析,最终不被cpu执行。

  • 注释以分号开头
image.png

二.伪指令 - segment、ends、end

  assume cs: code
  code segment
  mov ax, 1122h
  mov bx, 3344h
  add ax, bx

  mov ah, 4ch
  int 21h
  code ends
  end

-segmentends的作用是定义一个段,segment代表一个段的开始,ends代表一个段的结束,使用格式:

段名 segment
      :
段名 ends
  • 一个有意义的汇编程序中,至少要有一个段作为代码段存放代码

  • assume
    将用作代码段的code段和CPUcs寄存器关联起来

  • end
    编译器遇到end时,就结束对源程序的编译

  • 退出程序:

    mov ah, 4ch
    int 21h
    或是写成
    mov ax, 4c00h
    int 21h
    

三. 中断

  • 中断是由于软件的或是硬件的信号,使得CPU暂停当前的任务,转而去执行另一段子程序。也就是说,在程序运行过程中,系统出现了一个必须由CPU立即处理的情况,此时,CPU暂时中止当前程序的执行转而去处理这个新情况的过程就叫做中断。

  • 中断分类

    • 硬中断(外中断):由外部设备(比如网卡、硬盘)随机引发的,比如当网卡收到数据包的时候,就会发送一个中断
  • 软中断(内中断): 由执行中断指令产生的,可以通过程序控制触发

从本质上来讲,中断是一种电信号,当设备有某种事件发生时,它就会产生中断,通过总线把电信号发送给中断控制器。如果中断的线是激活的,中断控制器就把电信号发送给处理器的某个特定引脚。处理器于是立即停止自己正在做的事,跳到中断处理程序的入口点,进行中断处理。

中断执行过程.png
  • 可以通过指令int n产生中断

  • n是中断码,内存中有一张中断向量表,用来存放中断码对应中断处理程序的入口地址。

  • CPU在接收到中断信号后,暂停当前正在执行的程序,跳转到中断码对应的中断向量表地址处,去执行中断处理程序。

  • 常见中断:

  • int 10h用于执行BIOS中断

  • int 3是"断点中断",用于调试程序
    -int 21h用于执行DOS系统功能调用,AH寄存器存储功能号

四.DOS系统功能调用

  • DOS系统功能调用
    • DOS提供一组实现特殊功能的子程序供程序员在编写自己的程序时调用,以减轻编程的工作量。

    • 涉及屏幕显示、文件管理、i/o管理等等

    • 每个字程序都有一个功能号,所有的功能调用的格式都是一致的。调用的步骤大致如下:
      a. 系统功能号送到寄存器AH
      b. 入口参数送到指定的寄存器中;
      c.用 int 21h指令指向功能调用;
      d. 根据出口参数分析功能调用的执行情况

      举个🌰 :

       ;------数据段-------
      data segment
          string db 'hello World $'
      data ends
      
      mov ax, data
      mov ds, ax; 设置ds为数据段
      
      mov ah, 9h; 功能号,代表在屏幕显示字符串
      mov dx, offset string; ds: dx 代表字符串地址
      int 21h; 执行DOS系统功能调用
      

五. emu8086常用快捷键

  • F5:调试运行
    -F4: 重新加载
  • F8: 下一步(单步执行)
  • F9:直接一步到位运行整个程序
  • Ctrl+F8:跳过前面的代码,断点到单击选中的代码那行
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 8086汇编 本笔记是笔者观看小甲鱼老师(鱼C论坛)《零基础入门学习汇编语言》系列视频的笔记,在此感谢他和像他一样...
    Gibbs基阅读 37,371评论 8 114
  • 上篇文章我们了解了内存读写的指令,关于栈的操作.接下来我们看下这个Demo 新建项目(单个视图的空项目)CMD +...
    请叫我Hank阅读 1,822评论 0 3
  • 编写一个完整的汇编 汇编语言由2类指令组成assume cs:codecode segmentmov ax,112...
    Stone_熊小叔阅读 265评论 0 0
  • 编写一个完整的汇编语言 汇编语言由2类指令组成assume cs:codecode segment mov ax...
    为自己丶拼个未来阅读 350评论 0 0
  • 如果要我选择一种我最爱的食物,我想说:茶叶蛋。 高中时代就像2015年冬天的雪,已经一去不复返了。2015年,我高...
    雨天吖阅读 220评论 1 1