【汇编】我的第一个汇编程序

导言:

本次篇主要用两种方法实现汇编编程与运行,分别为masm 2015和masm5.0。

一、Masm 2015

;完整段的Hello World程序
DATAS  SEGMENT
     STRING  DB  'Hello World!',13,10,'$'
DATAS  ENDS

CODES  SEGMENT
     ASSUME    CS:CODES,DS:DATAS
START:
     MOV  AX,DATAS
     MOV  DS,AX
     LEA  DX,STRING
     MOV  AH,9
     INT  21H
   
     MOV  AH,4CH
     INT  21H
CODES  ENDS
    END   START
  • 伪指令db定义一个字符串,名字是STRING,字符串是“Hello World!”,13是回车符,10是换行符,$是汇编下字符串的结束标志。
  • segment…ends
    定义一个段,例子中定义了一个数据段DATAS和一个代码段CODES
  • end 表示编译结束,ends表示段结束
  • mov ah,9
    int 21h
    是固定表示,返回程序
  • assume这条伪指令的含义为“假设”,假设某一段寄存器和程序中的一个段的相关联。
  • start为程序入口

执行结果:
在这里插入图片描述

解释:
1.为什么要返回程序

在DOS(一个单任务操作系统)的基础上,一定有一个一直再运行的程序P1,P1把P2从可执行文件中加载入内存后,将CPU的控制权交给P2,P2运行结束后必须将CPU的控制权返回给P1。


二、masm5.0

64位计算机中自带的cmd无法运行汇编,需要使用DOS进行编译、连接、加载、运行。
在这里插入图片描述

  • DOSBox在使用的时候需要先配置环境,使用类似示例 “mount C F:\masm5.0” 的命令来将我们本地的一个目录挂载为 DOSBox 的一个驱动器之后,才能够正常使用 DOSBox。
    在这里插入图片描述
1、先编程放在文件放在masm5.0文件中\或者直接用edit编程
;1.asm
assume cs:codesg ;将用作代码段的段codesg和段寄存器cs联系起来。

codesg segment ;定义一个段,段的名称为“codesg”,这个段从此开始
			   ;codesg是一个标号,作为一个段的名称,最终被编译连接成一个段的段地址

	mov ax, 0123H
	mov bx, 0456H 
	add ax, bx
	add ax, ax 
	
	mov ax, 4c00H 
	int 21H ;这两条指令实现程序的返回
	
codesg ends ;名称为“codesg”的段到此结束

end ;编译器在编译汇编程序的过程中,碰到了伪指令end,结束对源程序的编译

2.编译、连接、加载运行

在这里插入图片描述
在这里插入图片描述


三、使用debug对程序执行过程跟踪

-R 查看修改CPU寄存器内容

-D 查看内存中内容

-E 改写内存中内容

-U 将内存中的机器语言翻译成汇编指令

-T 执行一条汇编指令

-A 以汇编指令的格式在内存中写入一条机器指令
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值