一个汇编语言从写出到最终执行的简要过程
大体分为以下三步:
第二步执行的操作是使用汇编语言编译程序对源程序文件中的源程序进行编译,产生目标文件;再用链接程序对目标文件进行连接,生成可在操作系统中直接运行的可执行文件。
第三步中,操作系统依照可执行文件中的描述信息,将可执行文件中的机器码和数据加载到内存,设置CS:IP指向第一条要执行的指令,然后由CPU执行程序。
下图是从汇编程序从写出到执行的详细步骤。
编写源程序
assume cs:code
code segment
start:mov ax,2000h
mov ds,ax
mov al,ds:[0] ;在汇编源程序中,如果用指令访问一个内存单元,
;则在指令中必须用“[...]”来表示内存单元,在编
;译器中编写时,必须在[]前面显示地给出段地址
;所在的段寄存器
mov bl,ds:[1]
mov cl,ds:[2]
mov dl,ds:[3]
mov ax,4c00h
int 21h
code ends
end start
编译链接
编译
为了使得我们编写的汇编语言程序得以执行,我们必须有相应的编译器和链接器,这里我们需要下载对应的三个文件,分别是MASM.exe、LINK.exe,ML.exe三个文件,对应的百度云链接如下:
链接:https://pan.baidu.com/s/15k0PZSgvO9JrAmilZ5U4Kg .
提取码:aswr
将下载的文件统一的放到一个文件夹下,如下图所示:
将三个文件拷贝至文件夹下就可以编译链表了,编译链接操作这里采用win10命令行窗口的方法进行编译和链接。编译链接前的文件下只有三个刚拷贝进来的文件,一个.asm文件和debug.exe(下面解释),首先先在命令行用masm编译.asm文件,首先先进到相应的文件夹下。运用masm 生成.obj文件,生成后的信息如下。
链接
生成了.obj文件后,运用link命令将其链接,最终生成.exe可执行文件,具体操作如下:
执行
生成了可执行文件后,需要运行可执行文件,由于win10是64位操作系统,不能运行16位的汇编语言程序,因此,我采用的方法是在dosbox里运行,要使得程序能够在dosbox运行,需要将debug.exe的程序放到当前的文件夹下,也就是前面所提到的debug程序,除此之外,还需要更改debug的相关路径。双击DOSBox 0.74 Options.bat,运行该批处理文件后用文本文档打开配置文件dosbox-0.74.conf文件,在文件的末尾进行更改。
在打开的文件的末尾输入如下语句,
至此,就可以运用dosbox来运行可执行文件了,用cd命令进入到对应的文件夹,输入debug compare.exe即可运行程序。
最后,通过t指令即可单步运行程序中的指令,如下图所示。
关键字:汇编语言 学习笔记 第一个程序
引用地址:
汇编语言学习笔记——————第一个程序
推荐阅读最新更新时间:2024-11-01 21:15
STM32入门学习笔记之MPU6050传感器解析实验4
(2)创建mpu6050.c文件,输入以下代码。 /********************************************************************************************************* MUP6050 驱 动 程 序 *********************************************************************************************************/ #include mpu6050.h #include delay.h /***********
[单片机]
STM32CubeMX学习笔记4:printf( )重定向到USART串口输出(参考官方例程)
MCU:STM32F103ZET6 IDE: MDK-ARM V5 +STM32CubeMX5.0.0 串口调试助手:SSCOM3.2 功能描述:USART1收到PC机发来的数据后原封不动的返回给PC机显示,但是C语言中printf函数默认输出设备是显示器,要使用printf输出到串口,需要将fputc里面的输出指向串口,这一过程就叫重定向。 需要配置的只有USART1,配置过程非常简单。 一. 在 Pinout&Configuration---System Core中: 1. 首先设置时钟RCC的HSE(外部高速时钟)为晶振模式:Crystal/ceramic Resonator 2. 设置系统SYS
[单片机]
嵌入式学习笔记10——51单片机之中断定时器中断
1. CPU时序的有关知识 (1)振荡周期:为单片机提供定时信号的振荡源的周期(晶振周期或外加振荡周期)。 (2)状态周期:2个振荡周期为1个状态周期,用S表示。振荡周期又称S周期或时钟周期。 (3)机器周期:1个机器周期含6个状态周期,12个振荡周期(使用计时器时,每隔一个机器周期计时器加1)。 (4)指令周期:完成1条指令所占用的全部时间,它以机器周期为单位。 2. 学习定时器前须明白: (1)51单片机有2组定时器/计数器(52单片机有三组),可定时或计数。 (2)定时器/计数器和单片机的CPU是相互独立的,定时器/计数器工作的过程是自动完成的,不需要CPU的参与。 (3)51单片机中的定时器/计
[单片机]
mips汇编语言程序设计实例
MIPS汇编语言学习 首先是: next_a: bne $v0, ‘a’, next_b #依次判断该字符是否是a,b,c,……,A,B,C,……,1,2,3,……,9,0。若是,则输出对应的串,跳转到main,进行下一次输入与判断,若都不是,则输出‘*’,跳转到main,进行下一次输入与判断。 li $v0, 4 #下同,不再赘述 la $a0, a syscall j main .asciiz 表示输出一个字符串,以“\n“换行符结尾。 .data 定义变量 a: .asciiz “Alpha ”。 等于: String a=“Alpha ”; MIPS汇编程序设计 实验目的 1. 掌握QTSPIM的调试技术 2. 了解MIP
[嵌入式]
MSP432学习笔记:比较器E模块
ComaratorE是具有用于多达16个通道一般比较器的功能的模拟电压比较器。 23.1 COMP_E简介所述COMP_E模块支持精确的斜率模 - 数转换,电压监控及外部模拟信号的监视。 COMP_E的特点包括 • 反相和同相端子输入多路复用 • 对于比较器输出软件可选RC滤波器 • 提供给定时器A捕捉的输入输出 • 端口输入缓冲器的软件控制 • 中断能力• 可选择的参考电压发生器,电压发生器的滞后 • 从共享基准参考电压输入 • 超低功耗比较器模式 • 中断驱动的测量系统, 用于低功率操作支持图23-1 示出了COMPE框 23.2 COMP_E操作 所述COMP_E模块由用户软件
[单片机]
ARM 学习笔记之二 LED点亮程序设计
第一步,先聊聊单片机 LED 点亮: 单片机可操作单个位:sbit led1 = P1 ^ 2; 通过控制 变量 led1 来控制灯 的 亮 与 灭; #include reg52.h sbit led1 = P1 ^ 2; void delay(unsigned int xx)//延时 { int i = 0; while(xx--) { for(i = 0; i 400; i++); } } int main() { while(1) { led1 = 1//灭 delay(100); led1 = 0;//亮 delay(100);
[单片机]
LPC2478时钟系统学习笔记
LPC2478芯片有 the Main Oscillator, the Internal RC Oscillator, and the RTC oscillator三个独立的时钟系统。下面分别介绍三者: 上电或任何复位发生时,lpc2478将the Internal RC Oscillator作为时钟源。此后用户程序(软件)选择是否选用其它两个时钟源。 对于lpc2478来说,其外部时钟在1MZ-24MZ之间。the Main Oscillator可以作为CPU的时钟源,也可以作为或不作为PLL的时钟源。 The oscillator(晶振) output is called oscclk。在使用
[单片机]
单片机学习笔记,三个步骤教你学
作为一名电子技术从业人员,你学过单片机吗?你会运用单片机吗?我想你一定学过,但不一定会运用。因为学习单片机比学习其他学科需要付出更多的努力和代价,不仅要学习理论知识还要练习实际操作,而且主要是在实际操作中才能真正学到单片机技术。 因主修专业的不同以及电子基础的深浅不同,对于不同的人可能采用不同的学习方法,根据笔者的亲身学习经验,提出笔者的学习方法和步骤。 基础理论知识学习 基础理论知识包括模拟电路、数字电路和C语言知识。模拟电路和数字电路属于抽象学科,要把它学好还得费点精神。在你学习单片机之前,觉得模拟电路和数字电路基础不好的话,不要急着学习单片机,应该先回顾所学过的模拟电路和数字电路知识,为学习单片机加强基础。 否则,你的单
[单片机]