汇编语言学习总结

因为基础知识薄弱,自己计划在学校毕业前想再好好学习学习基础知识。读的书中有王爽的《汇编语言》和《Intel汇编语言程序设计》,这两本书都特别棒,现在将学习的一些新的记录整理下来。

第一部分:汇编语言工具、平台介绍

第二部分:汇编语言基本语法

1. 在汇编语言里,寄存器数据的存储位置至关重要,下表就列出了多种寻址地址的方法。

2. 字单元和字节单元

用X ptr指明内存单元长度:

mov byte ptr [1000H],1
mov word ptr [1000H],1

寻址地址在结构体和字段上的使用方法,下图是对应修改C语言结构体里汇编语言的方法:

3.div除法的使用方法

div reg
div 内存单元

被除数默认在ax或dx和ax中,如果除数是8位,被除数是16位,默认在ax中;如果除数是16位,被除数是32位,默认在ax和dx中。

4. 在8086cpu中只有4个寄存器是可以使用[...]进行内存单元寻址的。

1)bx bp si di 
2)bx->si di bp->si di
3)bp默认的是ss为段寄存器,bx默认的为ds为段寄存器

汇编函数中数据位置
立即数、寄存器、段地址和偏移地址()

5. 命令

dd:定义double

dup:配合db,dd,dw使用,重复

6.偏移指令的原理

CPU执行指令顺序:

a.从CS:IP指向内存单元读取指令,读取指令存入指令缓存器

b.(IP)=(IP)+1,指向下一条命令

c.执行命令。转向a,重复。

offset:

jmp:

jcxz:

7.转移指令

时间: 2024-08-28 18:55:31

汇编语言学习总结的相关文章

最强大的王爽汇编语言学习环境使用教程

最强大的王爽汇编语言学习环境使用教程 一.前言 这是采用VMwere Workstation 12 pro虚拟机软件,搭建的MS-DOS学习环境,在windowsXP/8/10及linux中均可以使用,在这个环境中,我集成了CCDOS中文系统,pdos中文系统,使用这些系统,可以进行中文输入与显示.还集成了,十分著名的汇编语言调试工具TR,它比debug更加强大.并且集成了适合王爽汇编语言学习的微软汇编语言编译器masm5和dos中最强大的文本编辑器 vim73 for DOS,这是一个支持彩色

汇编语言学习01

汇编语言(8086cpu) 恩,学习一门课程,我觉得应该有一定的条理性,而且自己要勤加思考才能学好,条理性:最好就是先整体的介绍一下全本书,然后再详细的介绍各个章节,而且,书籍的章节安排目录有一定的条理性,是渐进式的,前面的学习,为后面的内容做好了铺垫,打好了基础.不能随便排版(深入理解计算机系统是我读过数里面最好的) 读书教材:王爽的<汇编语言>教材比较好. 下面在阅读了三章以后写一下自己的收获. 汇编语言:基于底层的一门语言.在学习这本书时,学过计算机组成原理会对这本书的学习起到良好的作用

汇编语言学习第四章-第一个程序

本博文系列参考自<<汇编语言>>第三版,作者:王爽 前面的几章中我们断断续续的学习了一些指令,但是从来没有完整的通过汇编语言编写一个可执行文件即.exe文件.从本章开始我们将开始使用汇编语言并通过编译器编译链接一个完整的可执行文件. 4.1 一个源程序从写出到执行的过程 如下图所示,为一个完整的汇编程序到执行的过程: 上图的过程可以总结成以下几个步骤: (1) 根据汇编语言语法规则和目标程序工程编写汇编程序.这一步在文本编辑器或者在一些IDE中编写. (2) 通过汇编编译器将编写的

汇编语言学习第六章-包含多个段的程序

本博文系列参考自<<汇编语言>>第三版,作者:王爽 在前面的介绍的程序中只有一个代码段.那么如果我们需要将代码,数据分别存储在不同的内存空间应该怎么办呢?我们知道我们不可能随便使用任何一段内存空间,因为我们这段内存地址空间可能存储着非常重要的内容.其实,这只是我们考虑的太多啦,一旦我们将程序载入内存后,操作系统为我们分配的用于程序运行的内存空间都是安全的,绝对不会与其他程序的内存空间相重叠的. 往往程序获取内存有两种方式:一种是在程序载入内存的时候操作系统已经分配好的内存空间,另外

8086汇编语言学习(二) 8086汇编开发环境搭建和Debug模式介绍

1. 8086汇编开发环境搭建 在上篇博客中简单的介绍了8086汇编语言.工欲善其事,必先利其器,在8086汇编语言正式开始学习之前,先介绍一下如何搭建8086汇编的开发环境. 汇编语言设计之初是用于在没有操作系统的裸机上直接操作硬件的,但对于大部分人来说,在8086裸机上直接进行编程将会面临各种困难.好在我们可以使用软件模拟器来模拟硬件进行8086的学习实践.在<汇编语言>中作者推荐通过windows环境下的masm和debug进行学习. masm介绍: masm是一款DOS下的汇编工具包,

小甲鱼零基础汇编语言学习笔记第六章之包含多个段的程序

在前面的几个章节中,我们的程序都是只有一个代码段,本章我们开始学习如何编写包含多个段的程序. 1.在代码段中使用数据 首先考虑这样一个问题,计算以下8个数据的和,结果存放在ax寄存器中: 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H 在前面的课程中,我们都是累加某些内存单元中的数据,并不关心数据本身,可现在我们要累加就是已经给定了数值的数据. 代码如下: 1 assume cs:codesg 2 codesg segment 3 dw 0123H

汇编语言学习系列 冒泡排序实现

假如汇编语言要实现如下C语言的功能,编译环境Ubuntu14.04(32位). #include<stdio.h> void swap(int *p, int *q) { int tmp = *p; *p = *q; *q = tmp; } int main() { int a[] = {3, 0, 5, 1, 4, 6, 2, 9, 8, 7}; int i ,j; for(i = 0; i < 10; i++) { for(j = i + 1; j < 10;j++) { if

汇编语言学习系列 递归实现

假如汇编语言要实现如下C语言的功能,编译环境Ubuntu14.04(32位). #include<stdio.h> int refact(int n){ if(n == 1) return 1; else return n * refact(n - 1); } int main(){ int a = 4; printf("%d\n", refact(a)); return 0; } 无论对于递归实现还是循环实现,汇编都是将转换为跳转语句实现.可以把上面的代码转换为 refa

汇编语言学习系列 for循环实现

假如汇编语言要实现如下C语言的功能,编译环境Ubuntu14.04(32位). #include<stdio.h> int fact_for(int n) { int i; int result = 1; for(i = 2; i <= n; i++) result *= i; return result; } int main(){ printf("%d\n", fact_for(3)); return 0; } 代码for.s .section .data n: