【汇编语言Ⅲ】汇编程序语言

汇编语言程序

以下内容对应王爽老师的教材章节号
在这里插入图片描述

用汇编语言编写程序的过程

  • 程序员编写汇编程序→编译器将其编译为机器码→计算机执行
DATA SEGMENT			        ;伪代码		
BUF  DB 'HELLO WORLD!$'   ;伪代码	
DATA ENDS                 ;伪代码	

CODE SEGMENT              ;汇编指令
	ASSUME CS:CODE          ;汇编指令            
START:							 

	MOV AX, DATA            ;汇编指令
	MOV DS, AX              ;汇编指令
	
	MOV DX, OFFSET BUF      ;汇编指令

	MOV AH, 09H		          ;汇编指令
	INT 21H                 ;汇编指令
	
	MOV AH, 4CH             ;程序返回
	INT 21H                 ;程序返回

CODE ENDS			            ;伪代码	
	END START               ;伪代码	
伪代码
  • 伪代码是没有对应机器码的指令,最终不会被cpu所执行
  • 伪指令是有编译器来执行的指令,编译器根据伪指令来进行相关的编译工作
  • 不是指导机器工作的,而是指导编译器把汇编语言的源程序转成机器码用的
程序返回
MOV AH, 4CH             
	INT 21H                 
  • **(固定套路)**程序结束运行后,将cpu的控制权交还给使它得以运行的程序(通常为dos系统)
程序中的三种伪指令

在这里插入图片描述

如何写一个汇编程序

在这里插入图片描述

用debug装载程序

在这里插入图片描述

[]和()

  • 在这里插入图片描述

loop指令

  • 功能:实现循环(计数型循环)

  • 格式:loop 标号

    • 执行到标号所标记的语句时会进行循环
    • 标号实际上在汇编代码里面对应的是标记语句的偏移地址
    • 在这里插入图片描述
  • CPU在执行loop指令是时候要进行的操作

    1. (CX) = (CX)- 1(先-1再判断)
    2. 判断CX中的值,如果不为零则转到标号处执行程序,如果为零,将继续向下执行程序,也就是退出循环了(因此CX被称为计数寄存器)
    3. 因此CX中要提前存放循环次数,因为(CX)影响着loop指令的执行结果
    4. CX的值就是循环次数
    5. 在这里插入图片描述

段前缀的使用

  • 在这里插入图片描述

  • ES:附加段段寄存器

在代码段中使用数据

  • 首先直接在程序中写入物理地址是很危险的,稍有不慎可能会导致某个程序的崩溃.
  • 那么相对应的对策则是,在程序的段中存放数据,运行时有操作系统分配空间.
  • 数据段,代码段,栈段,各种段中都可以有数据,我们可以在单个的段中放置数据,也可以将数据,代码,栈放入不同的段中
  • 但是为了在编译过程中让数据从默认的0开始,让代码从正确的IP位置开始,要给代码段添加标号
    • start:
    • 指示代码开始的位置
    • end start
    • 不止可以通知编译器程序结束,还可以通知编译器程序的入口在什么地方

将数据,代码,栈放入不同段

  • 在这里插入图片描述

  • 注意:代码段是程序自动给CS赋值为0,故而不用给CS进行MOV操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值