汇编学习之路

写一些汇编基础,做个记录
包括输入输出、字符显示、字符判断等
输入输出先干为敬
1 | MOV AH,1 ;输入字符 |
汇编
对于一个汇编程序有三段:数据段、堆栈段、代码段
初始化程序
1 | mov AX,DATAS |
为什么需要这个,因为 mov
无法实现将立即数传入段寄存器,但是 mov
可以将立即数传入通用寄存器
汇编语言程序中,数据的输入时以字符形式的 0~9 输入时对应的 ASCII码
减掉 30H 存入主存中的,输出时是加上 30H
输出外设上的,比如十六进制 A,主存中是 0AH,加上 37H 变成了 41H。因为主存中存的就是 41H,所以可以直接输出带外设上
21H 基本功能模块
1 从键盘上输入一个字符
AH=01H AL = 输入自负的 ASCII 码值
举例
1 | MOV AH,01H |
2 向显示器输出一个字符
入口参数 AH=02H,DL=’输出字符串码’
举例
1 | MOV DL,'C' |
3 向显示器 输出一个字符串
AH = 09H
DS = 欲输出字符串的段地址 DX = 欲输出字符串的 偏移地址
1 | MOV DX , OFFSET STRING |
完整代码:
1 |
|
判断大小
CMP
比较.(两操作数作减法,仅修改标志位,不回送结果).JA/JNBE
不小于或不等于时转移.JAE/JNB
大于或等于转移.JB/JNAE
小于转移.JBE/JNA
小于或等于转移.
以上四条,测试无符号整数运算的结果 (标志 C 和 Z).JG/JNLE
大于转移.JGE/JNL
大于或等于转移.JL/JNGE
小于转移.JLE/JNG
小于或等于转移.
以上四条,测试带符号整数运算的结果 (标志 S,O 和 Z).
十六进制输出
示例
1 | START: |
比较两个数字大小(完整代码)
1 | DATA SEGMENT |
压缩 BCD 码加减法
1 | ; 8086汇编 |
7/3 号,写个简单的,同样是压缩BCD码
加法
1 | DATA SEGMENT |
记一下:数据寄存器 AX、BX、CX、DX,每个数据寄存器都是 16 位,但是又可以把高、低 8 位分别作为两个独立的 8 位寄存器来用。高 8 位分别记作 AH、BH、CH、DH,低 8 位分别记作 AL、BL、CL、DL。例如 AX 可以当做两个 8 位寄存器 AH、AL 来用
8086/8088
CPU 的 14 个寄存器除了这四个 16 位可以分别当做两个 8 位,其他都不能
- 标题: 汇编学习之路
- 作者: tsvico
- 创建于 : 2018-06-19 16:11:42
- 更新于 : 2021-03-06 20:21:07
- 链接: https://blog.tbox.fun/2018/e36c0d6c.html
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。