手把手教你学习汇编语言——从入门到起飞

article/2025/10/11 21:19:34

专接本交流群:1051749714 (有什么问题欢迎进群讨论)
关于这篇博客,笔者会尽量用最简单的方式教会大家汇编语言以便应付各种考试
有什么不足的忘大佬评论或私信指出。

汇编环境安装
汇编运行调试
汇编指令

希望大家看完这些找一些样例练习一下会学的更好,这里有一些练习题希望能帮助到大家
汇编语言编程题总结

汇编语言环境安装

这里用的是Masm,相比较纯Dosbox会简单很多的
汇编语言和CodeBlock安装包 密码:dqs9

下载以后打开运行
下一步
在这里插入图片描述
安装
在这里插入图片描述
完成即可
在这里插入图片描述
安装完成后打开,进来是默认的程序框

在这里插入图片描述
汇编语言运行的话,一定要保存文件到本地才可以运行,调试的话也需要先运行一下才能调试,否则就是调试的上次运行的程序。

汇编运行调试

当我们写好以后,它会提示我们先保存在运行
在这里插入图片描述

ctrl+s保存在一个地方,记得改名字,把 * 换成名字
在这里插入图片描述

再点击运行,出现这个就可以了,这是没有屏幕输出的程序,如果有屏幕输出,还会先输出程序输出的,在输出这一行。
在这里插入图片描述

(如果到时候一闪而过,说明你的程序有问题)
下面会有提示哪一行有问题的,双击就会高亮显示那一行
(笔者这个就是在AL后面多打了一个S)

在这里插入图片描述

运行可以了,那就大概说一下调试的过程(如果要调试的话,一定要先运行一遍才可以,否则就是调试的上一次运行的代码)

调试的话,输入 T 是运行一步,你可以选择一步一步的运行,
我们输入一个T 出来的划线位置就是下一次要运行的代码
我们可以看到命令框第二个划线的 MOV AL,[0000H] 我们的AL赋值是12H 第二次AX的低四位还不是12H
当我们再输入一个T,才是12H,也就是调试出来的代码是下一次将要运行的代码。
在这里插入图片描述

也许有些时候可能会觉得一步一步调试太麻烦了,这里也有直接跳转调试的

我们之间输入一个U就会出现每一步代码所对应的数。
在这里插入图片描述

通过G 在写对应的号,就可以跳转到指定的位置
在这里插入图片描述

其他的话,可能会有更方便的,但是笔者认为这些就很够用了。

软件安装运行调试大概就是到这里了,接下来我们来简述一下基本的命令语句吧

汇编指令

先来看一下基本的结构(分号后面的都是注释的,汇编语言用分号注释)

DATAS SEGMENT	;数据段;此处输入数据段代码  
DATAS ENDSCODES SEGMENT	;代码段ASSUME CS:CODES,DS:DATAS		;数据段给DS,代码段给CS
START:			;开始代码MOV AX,DATAS	;需要先把DATAAX寄存器,然后再从AXDSDATA不能直接给DSMOV DS,AX;此处输入代码段代码MOV AH,4CH		;结束语句INT 21HCODES ENDS		;代码段结束END START	;结束代码

先来说常用的命令符号,如果大家有什么其他命令符使用的话,可以评论或者私信我,我看到会尽快给大家展示出来如何使用

MOV AL,BL
这里就是把BL的值放到AL中。

然后就是类似于C语言的函数
这个函数就是起个名字加个分号
汇编语言的函数没有结束的地方,一般如果需要结束的加,就要加一个跳转到其他地方
如果没有跳转,他就会一直运行到下面

DATA SEGMENT 
A DB 12H	;定义两个变量
B DB 24H
DATA ENDS 
CODES SEGMENT ASSUME DS:DATA,CS:CODES
START:MOV AX,DATAMOV DS,AXJMP EXIT	;这里就是直接跳转到EXIT  JMP就是跳转的方法MOV AL,A	;A->ALMOV BL,B	;B->BLMOV A,BL	;BL->AMOV B,AL	;AL->BEXIT:MOV AH,4CHINT 21H
CODES ENDSEND START

当然还有很多特别的JMP 也就是一些带标志位的 就是标志寄存器里面的六个状态位

1、进位标志CF(Carry Flag)
进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等。2、奇偶标志PF(Parity Flag)奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。利用PF可进行奇偶校验检查,或产生奇偶校验位。在数据传送过程中,为了提供传送的可靠性,如果采用奇偶校验的方法,就可使用该标志位。3、辅助进位标志AF(Auxiliary Carry Flag)
在发生下列情况时,辅助进位标志AF的值被置为1,否则其值为0:(1)、在字操作时,发生低字节向高字节进位或借位时;
(2)、在字节操作时,发生低4位向高4位进位或借位时。对以上6个运算结果标志位,在一般编程情况下,标志位CFZFSFOF的使用频率较高,而标志位PFAF的使用频率较低。4、零标志ZF(Zero Flag)
零标志ZF用来反映运算结果是否为0。如果运算结果为0,则其值为1,否则其值为0。在判断运算结果是否为0时,可使用此标志位。5、符号标志SF(Sign Flag)符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。
在微机系统中,有符号数采用补码表示法,所以,SF也就反映运算结果的正负号。运算结果为正数时,SF的值为0,否则其值为16、溢出标志OF(Overflow Flag)溢出标志OF用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出,
OF的值被置为1,否则,OF的值被清为0。 
(有些时候,有些问题会问你是不是溢出了,这里有个巧计的方法,负数加负数是正数,正数加正数是负数,如果出现这种情况就是溢出了)

然后衍生出来的就是几个条件跳转指令
一般情况下,条件跳转上面要跟一些影响标志寄存器的命令


JE   ;等于则跳转
JNE  ;不等于则跳转JZ   ;0 则跳转
JNZ  ;不为 0 则跳转JS   ;为负则跳转
JNS  ;不为负则跳转JC   ;进位则跳转
JNC  ;不进位则跳转JO   ;溢出则跳转
JNO  ;不溢出则跳转JA   ;无符号大于则跳转
JNA  ;无符号不大于则跳转
JAE  ;无符号大于等于则跳转
JNAE ;无符号不大于等于则跳转JG   ;有符号大于则跳转
JNG  ;有符号不大于则跳转
JGE  ;有符号大于等于则跳转
JNGE ;有符号不大于等于则跳转JB   ;无符号小于则跳转
JNB  ;无符号不小于则跳转
JBE  ;无符号小于等于则跳转
JNBE ;无符号不小于等于则跳转JL   ;有符号小于则跳转
JNL  ;有符号不小于则跳转
JLE  ;有符号小于等于则跳转
JNLE ;有符号不小于等于则跳转JP   ;奇偶位置位则跳转
JNP  ;奇偶位清除则跳转
JPE  ;奇偶位相等则跳转
JPO  ;奇偶位不等则跳转

说完跳转类的指令,接下来我们看一看左移右移指令
左移这种指令左移一位就是二进制左移一位,也就是乘2的操作。

SHL(Shift Left)SAL(Shift Arithmetic Left): 每位左移, 低位补 0,  高位进 CF
SHR(Shift Right)     : 每位右移, 低位进 CF, 高位补 0
SAR(Shift Arithmetic Right)     : 每位右移, 低位进 CF, 高位不变(也就是高位复制到第二位)使用的时候就是 
SHL AL,1
左移一位
如果移动的位数大于1位,就要放到CX

循环左移右移

;ROL(Rotate Left): 循环左移, 高位到低位并送 CF
;ROR(Rotate Right): 循环右移, 低位到高位并送 CF
;RCL(Rotate through Carry Left): 循环左移, 进位值(CF)到低位, 高位进 CF
;RCR(Rotate through Carry Right): 循环右移, 进位值(CF)到高位, 低位进 CF使用的时候就是 
ROL AL,1
循环左移一位
如果移动的位数大于1位,就要放到CX

然后就是加减乘除

加法add和adc、inc
ADD AL,BL
ALBL加起来放到ALADC的话就是ADD的运算在家一个CF状态位的值,INC AL
AL1减法sub和sbb、dec
SUB 对应ADD
SBB 对应ADC
DEC 对应INC
用法都是一样的,就是一个是加一个是减乘法mul和imul
MUL是无符号乘法
MUL 8位的   就是AL乘这个数放到AL 高位放到AH
MUL 16位的   就是AX乘这个数放到AX中	高位放到DX除法div和idiv
DIV是无符号除法
DIV 8位的   就是 AX除这个数,商放AL  余数放AH
DIV16位的   就是(DX:AX)除这个数,商放AX  余数放DX异或运算XORXOR AL,BL
ALBL异或运算放入AL与运算AND   或运算OR都是一样的然后就是CMPTEST
CMP 就是对应的减法,但是这个不会影响AL的值,他只会影响状态标志位
TEST 就是AND的用法,也是不会影响AL,只影响状态标志位

最后就是DOS功能的输入输出

字符输入输出
DATA SEGMENT DATA ENDS CODES SEGMENT ASSUME DS:DATA,CS:CODES
START:MOV AX,DATAMOV DS,AXMOV AH,01H	 ;键盘输入的时候,给AH  1INT 21H		 ;然后INT 21H调用,默认输入到ALMOV DL,AL	 ;CMD窗口输出的时候,要把输出的放到DLMOV AH,02H	 ;AH  2INT 21HEXIT:MOV AH,4CHINT 21H
CODES ENDSEND START
字符串输入输出
DATA SEGMENT BUF DB 20 DUP('$')BUFF DB 'Hello World!$'
DATA ENDS CODES SEGMENT ASSUME DS:DATA,CS:CODES
START:MOV AX,DATAMOV DS,AXMOV DX,OFFSET BUF	;把偏移地址给DX,也可以用 LEA DX,BUF  二者皆可MOV AH,0AH	 ;键盘输入的时候,给AH  10INT 21H		 ;然后INT 21H调用,默认输入到BUFMOV DX,OFFSET BUFF	 ;CMD窗口输出的时候,要把输出偏移地址放到DXMOV AH,09H	 ;AH  2INT 21HEXIT:MOV AH,4CHINT 21H
CODES ENDSEND START

http://chatgpt.dhexx.cn/article/o9wZuGto.shtml

相关文章

小白的入门之——汇编语言程序设计教程

目录 第一章 基础知识 1.1汇编语言的特点 1.2计算机中数据表示的特点 【BCD码表示法(Binary Coded Decimal)】 【定点数】 —原码表示法— —反码表示法— —补码表示法— 浮点数 1.3 ​​​​​​计算机的数据存储 寄存器 存储器 数据在主…

汇编入门基础

1.什么是汇编语言? 汇编语言就是低级语言,直接描述/控制 CPU 的运行,我们知道,CPU 只负责计算,本身不具备智能。你输入一条指令(instruction),它就运行一次,然后停下来&…

汇编语言入门教程

一、汇编语言是什么 ​ 汇编语言是二进制指令(操作码)的文本形式,与指令是一一对应的关系。比如加法指令00000011写成汇编语言就是ADD 二、前置知识——寄存器 ​ 1、寄存器不依靠地址区分,而依靠名称,CPU通过名字去…

南邮《汇编语言程序设计》期末复习 CH3: 汇编语言指令集

本文转载自厉害的 孔姐姐 的 博客 。 由一只孔姐姐的小迷弟负责排版和整理~ 一、基本概念 1.指令:单个的 CPU 操作,通知 CPU 执行某种操作的 “命令” 指令集:所有指令的集合 机器指令:用二进制序列(0、1&#xff09…

汇编语言程序格式

1 逻辑段 汇编语言源程序由一个或多个逻辑段组成。 ❖ 一个程序中可以有几个同一类型的逻辑段。 ❖ 必须至少有一个代码段。 [注]源程序分段的目的在于程序结构清晰、便 于内存分配,寻址方便,一个源程序需要设置 几个段应根据具体…

汇编常用指令

通用寄存器及使用 IA-32系列有8个32位通用寄存器&#xff0c;名称分别为&#xff1a;EAX,EBX,ECX,EDX,ESP,EBP,ESI,EDI&#xff0c;如图&#xff1a; 简单传送指令 指令中文名格式解释备注MOV传送指令MOV DEST,SRCDEST<SRCXCHG交换指令XCHG OPER1,OPER2把操作数oper1的内容…

第一章 汇编语言和汇编指令

【用最少的指令来实现功能】 自用 文章基于《计算机体系结构新讲》&#xff08;中国地质大学出版社&#xff09; 目录 一、汇编指令 &#xff08;1&#xff09;MIPS汇编指令示例解析 &#xff08;2&#xff09;MIPS指令集 二、汇编指令中的操作数 &#xff08;1&#xff0…

pic单片机汇编 c语言,PIC单片机汇编语言指令详解

PIC单片机汇编语言指令详解 pic单片机为最常用单片机之一&#xff0c;许多程序均基于pic单片机进行开发。因此&#xff0c;熟练pic单片机编程尤为重要。为保证大家能准确、熟练掌握pic单片机的使用&#xff0c;本文特带来pic单片机的各种汇编语言指令的讲解。 一、pic的指令系统…

汇编:汇编指令分类

文章目录 一、指令分类二、伪指令1、assume2、segment、ends3、end 三、汇编指令1、退出程序指令2、中断2.1、概念2.2、中断的分类2.3、本质2.4、中断指令 3、call、ret 四、指令处理的数据长度 使用汇编语言编写一个完整的程序&#xff0c;步骤大致如下&#xff1a; 1、编写源…

汇编语言指令及七种寻址方式指令实现

指令讲解 进入debug模式后&#xff1a;&#xff08;进入debug模式之前的讲解 可以参考我的另一篇博文&#xff1a;masm5.0运行 -u::显示机器指令和汇编指令 -d:显示的具体数据 内存单元内容查看 -r:查看寄存器内容 -r&#xff1a;修改寄存器的内容 如修改ax寄存器的值为12…

微机原理之汇编语言指令集

汇编语言指令集 1.1 概述1.1.1 指令集体系结构、机器指令和符号指令1.1.2 符号指令的书写格式 1.2 操作数1.2.1 通用寄存器中的操作数1.2.2 段寄存器和指令指针寄存器1.2.3 标志寄存器 1.3 寻址方式1.3.1 立即寻址1.3.2 寄存器寻址1.3.3存储器操作数寻址1.3.3.1 直接寻址1.3.3.…

MIPS汇编语言指令

MIPS汇编语言指令 寄存器指令集指令格式R型指令I型指令J型指令 寄存器 寄存器在MIPS体系结构中有32个通用寄存器&#xff0c;在汇编程序中可以用编号表示&#xff0c;$0~31 &#xff0c; 也 可 以 用 名 称 表 示 &#xff0c; 如31&#xff0c;也可以用名称表示&#xff0c;如…

汇编常见指令

文章目录 常见的运算类汇编指令add指令sub指令mul乘法指令div除法指令inc&#xff08;自增&#xff09;&#xff08;即C语言&#xff09;dec&#xff08;自减&#xff09;&#xff08;即–&#xff09;push&#xff08;入栈&#xff09;pop&#xff08;出栈&#xff09;and&…

log4j的ConversionPattern

log4j的ConversionPattern参数的意义 http://lizhou.iteye.com/blog/939154 博客分类&#xff1a; java log4j 多线程 Apache Tomcat F# &#xff0d;X: X信息输出时左对齐 %p: 输出日志信息优先级&#xff0c;即DEBUG&#xff0c;INFO&#xff0c;WARN&#xff0c;ERROR&am…

log4j的ConversionPattern参数的意义

1、常用标志&#xff1a; &#xff0d;X: X信息输出时左对齐 %p: 输出日志信息优先级&#xff0c;即DEBUG&#xff0c;INFO&#xff0c;WARN&#xff0c;ERROR&#xff0c;FATAL, %d: 输出日志时间点的日期或时间&#xff0c;默认格式为ISO8601&#xff0c;也可以在其后指定…

conversionpattern(conversionpattern 自定义字段)

请教以下log4j 日志文件不会弄啊。 直接在Myeclipse中编辑properties 文件的时候不能使用中文的。你可以下载个插件&#xff0c;或者干脆在外边编辑~~你用一个类去读&#xff0c;然后在里面用logger去执行&#xff0c;在log4j的配置文件里面针对这个类配置一个把日志写到文件里…

log4j的配置ConversionPattern详细讲解

原文来自https://blog.csdn.net/reserved_person/article/details/52849505感谢大佬 先写下我一直没找到的ConversionPattern里面参数代表的详细含义 参数说明例子%c列出logger名字空间的全称&#xff0c;如果加上{<层数>}表示列出从最内层算起的指定层数的名字空间log…

零阶保持器(ZOH)与一阶低通滤波器频率特性分析

1.零阶保持器&#xff08;ZOH&#xff09;频率特性分析 零阶保持器传递函数&#xff1a; 画 Bode 图进行频率分析&#xff1a; stf(s); T0.0002; %采样周期0.0002s G(1-exp(-T*s))/s; bode(G); 从图中可以看出&#xff1a;随着频率 ω 的的增加&#xff0c;当 ω 在 10000 附…

一阶低通滤波器、功能触发、周期性触发的simulink模型

01--概述 主要简单叙述在基于模型的过程中比较常用的一些算法&#xff0c;一个是一阶低通滤波器&#xff0c;一个是功能触发&#xff0c;另外一个是周期性触发。会简单介绍下这些算法的应用。 02--一阶低通滤波器 其计算公式为&#xff1a;Y(n) A*X(n) (1−A)*Y(n-1) A滤…

一阶低通滤波器的传递函数分析

一、无源一阶低通滤波器分析 由图可以知道&#xff0c;输入信号为Vi,输出函数为Vo&#xff0c; 电阻R的阻抗为R&#xff0c;C电容C阻抗为1/jwC&#xff0c;Vo实际上是Vi在电容C上的分压&#xff0c;则有&#xff1a; 则有&#xff1a; 将jwS变换得到&#xff1a; 再令Vo/Vin 表…