16位汇编第一讲简介

汇编第一讲 汇编简介

一.什么是汇编

  汇编语言他是计算机语言,计算机语言通俗点说就是人类和计算机(也就是CPU)沟通的桥梁,计算机不认识人类的语言,只认得二进制(0和1)但是我们想让你算计完成我们的工作,每次都是0,和1,那样会崩溃的,(老一辈的是这样的)所以后面汇编语言出现了,用一些简单的助记符来替代机器语言(二进制)通用的语言,比如 + - * / 这种助记符,

add....汇编语言是和机器语言一一对应的.

二.汇编语言有什么用处好处

    1.学好汇编了,你可以理解计算机更为透彻

    2.学好汇编,可以增加自己的调试能力

    3.学好汇编,你可以反汇编,做一些反病毒,等等一系列的工作.

三丶语言发展史

机器语言 ->汇编语言 -> C语言 -> C++语言等等

四丶汇编语言主要操作什么

汇编语言主要操作的是寄存器

在CPU中,有八个通用寄存器

ax (add,代表相加,累加的意思)累加寄存器

bx (base,代表基地址,存放地址的寄存器) 基址寄存器

cx (count,个数,代表统计的意思)计数寄存器

dx (data,数据) 数据寄存器

SI (source) 源寄存器,存放源地址的内容的寄存器

DI (Dest) 目标寄存器,从源寄存器中memcpy到目标寄存器中

BP (base Point) 堆栈,理解为栈底指针,每次在栈中移动数据,出栈进栈,都会更新.记录的是当前的栈底

SP () 堆栈栈顶指针.

指令寄存器,以及四个段寄存器

指令寄存器,标志寄存器,以及四个段寄存器.

IP ,和段寄存器CS一起使用,记录的是偏移(至于怎么使用,会在下一讲讲清楚) 指明了CPU要执行的那条指令

IP是和CS一起使用,用来确定销一条指令的物理地址

Flag 标志寄存器, 存放各种标志的.

五丶WindowsXp下的简单Debug调试工具的简单使用

 我们编写汇编程序,一般用debug

使用方法,

1. win + R 打开运行窗口输入cmd,在cmd中输入Debug命令

2. 直接开始菜单中 选择右边的运行窗口,输入cmd,然后在cmd输入debug命令

一丶debug中常见的指令

a 汇编,代表我们可以开始汇编了. (把汇编代码转换为机器码)

u 反汇编,(把机器代码变为汇编代码)

  如果你有一个写到文件的机器码文件,可以当做debug的参数传入,然后u,就可以显示文件中汇编代码了,把机器代码反汇编成了汇编代码了

t 单步不如(在vc++6.0中,相当于F11键)

r 寄存器 (相当于vc++6.0中的F10键,)可以修改寄存器的内容,比如 r cx 然后回车,输入值,然后输入p往下执行即可查看.

g 断点执行(也就是vc中的F5执行)

D 部分数据显示 (可以显示一段内存中的数据)

n 文件名 (本地创建一个文件, 例如n hello ,不用加双引号包裹)

e 指定地址写入,可以指定地址写入一段数据

w 把汇编代码写入到文件(文件是由n指令创建的)

等等这些是常用的,具体的debug指令会放到云盘中大家下载:

链接:http://pan.baidu.com/s/1kVDWzHl 密码:adew

二丶使用debug截图分享

1.运行CMD,输入debug命令

2.输入a,开始汇编

mov ax,1 的意思是把 1赋值给ax

ret 的指令就是(return 返回的意思)你写的汇编程序也要返回否则就出错

3.输入p指令调试查看一下

4.利用r指令,修改寄存器的值,写入到文件,注意写入到文件必须写入字节大小,字节大大小就是cx寄存器中存储(cx 计数寄存器)

5.查看是否更改,p指令查看

6.n指令,在本地目录创建一个文件

7.w指令,将我们的代码写入到文件

8.利用winhex查看本地文件

其中B8 代表指令MOV

01 00 代表16位寄存器AX里面的值

C3 代表ret返回

9.将文件,反汇编为汇编代码,当做debug的参数

六丶使用debug调试工具(也可以调试,亦可以当做编辑器)显示helloword指令

1.如果显示helloworld,咱们需要一个指令字典,在上面的下载链接中提供了.

指令字典的看法

1.主页面

2.点击汇编语言,选择8086

3.选择下面的功能号

上面说了,ah是高把位,我们要显示字符串,需要给这个ah赋值为09 (具体系统调用(也就是API调用显示hello下一讲详细讲解))

然后dx寄存器我们需要给定一个字符串, (e 指令指定地址 e 108 "hello$" 即可)

调用的时候,用int 21 指令调用(内部会查表,具体怎么样,下一讲细讲)

4.使用debug显示一个helloworld

第一个指令  -e 140 mov "helloworld$" 代表我们给140地址写入一个字符串, 可以用d指令查看  d 140 回车就会显示

第二个指令 a,表示我们开始汇编

按照上面的指令字典,我们知道,dx寄存器需要是字符串的首地址, 所以利用mov 指令,把140给dx了

然后因为调用函数(也就是系统调用) ah 我们需要给9,代表调用那一项

然后int 21 代表系统调用的意思,也就是说(调用函数,开始调用函数)

然后显示了

时间: 2024-10-20 01:29:57

16位汇编第一讲简介的相关文章

16位汇编第八讲指令第四讲

16位汇编第八讲指令第四讲 一丶串操作类指令 1.什么是串操作? 1.串操作指令是8086指令系统中比较独特的一类指令,采用比较特殊的数据串寻址方式,在操作主存连续区域 的数据是,特别好用.因而比较常用 简而言之,就是内存中的一段数据,拷贝/读取/修改... 到另一块另内存 重点掌握  MOVS  STOS  LODS CMPS SCAS REP 2.串操作的简介 1.串操作指令的操作数,是驻村中连续存放的数据串(String 注意string表示串的意思)--也就是一段数据在内存中 是连续的,

16位汇编第六讲汇编指令详解第二讲

16位汇编第六讲汇编指令详解第二讲 1.比较指令 CMP指令 1.CMP指令是将目的操作数减去源操作数,按照定义相应的设置状态标志 2.CMP指令执行的功能与SUB指令(相减指令)一样,但是不同的是CMP指令之根据结果设置标志位 而不修改值 可以操作的指令格式 CMP reg,imm/reg/mem CMP mem,imm/reg 上面是CMP指令的语法,具体的也可以查询帮助文档,inter手册 inter手册查的办法 第一个框代表了CMP指令的所有语法 比如 reg,reg 表示可以比较寄存器

16位汇编第六讲汇编指令详解第第三讲

                                          16位汇编第六讲汇编指令详解第第三讲 1.十进制调整指令 1. 十进制数调整指令对二进制运算的结果进行十进制调整,以得到十进制的运算结果 2.分成压缩BCD码和非压缩BCD码调整 简而言之: 以前的时候你有个手表,里面的数字是九,如果加一个1就是0了,就会产生进位, 不过这个是10进制进位的,所以应该是 a了,但是a的话就出错了.所以我们就出来了这个调整指令直接变为零,然后进位,也就是16进制码当做10进制使用

32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数

32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数 (如果想看所有代码,请下载课堂资料,里面有所有代码,这里会讲解怎么生成一个窗口程序) 一丶32位汇编编写Windows窗口程序 首先我们知道32位汇编是可以调用Windows API的,那么今天我们就调用windowsAPI来写一个窗口程序 如果你有windows开发知识,那么就很理解了,如果没有,那么跟着我写,跟着步骤去写,那么也可以写出来 首先我们要编写一个窗口程序(使用SDKAPI编写)有几个步骤 1.设计窗口类 2.注

16位汇编中的伪指令

汇编中的伪指令(基于汇编编译器MASM讲解) 一丶什么是伪指令,以及作用 首先我们用汇编开发效率低,如何才能开发效率高,甚至开发速度比C语言或这个高级语言快 答案: 伪指令 什么是伪指令 伪指令是汇编编译器提供的,比如昨天我们写的汇编代码,假设调用一个Call我们每次都要手工处理 保存栈底,开辟就变量空间,保存寄存器环境....每次都要做,特别麻烦,所以编译器帮我们提供了伪指令,只要我们 按照汇编编译器的语法去写,那么这些汇编编译器则会自动帮我们补全 比如昨天的代码: ;调用开始,把参数压栈 m

16位汇编 多文件 intel汇编 编译器masm5.0 调用子程序库即静态库的自定义函数 WINDOWS

;以下是16位汇编 创建静态库,并调用静态库中的函数 ;多文件汇编格式 ;编译方法(此处用的是masm 5.0,如果是其他的编译器,有可能不能编译) ;第一种,编译方法 ;1.masm main.asm  生成.obj文件 ;2.masm lib.asm  生成.obj文件 ;3.link main.obj lib.obj 生成.exe文件 ;第二种,编译方法 ;1.masm main.asm  生成.obj文件 ;2.masm 16lib.asm  生成.obj文件 ;3.lib 16lib.

汇编知识扫盲之16位汇编跟32位汇编的保护模式以及汇编代码编写

汇编知识扫盲之16位汇编跟32位汇编的保护模式以及汇编代码编写 一丶内存寻址模型 逻辑地址.线程地址.物理地址 了解汇编之前.先了解一下上面这些词的含义; 逻辑地址: 这个是邮编一起生成的.逻辑地址一般都是 段加段内偏移组成的.每个进程独享. 线性地址: 由分段管理机制.将逻辑地址转化为线性地址.这个了解即可.学过内核的人看到应该明白.如果没有学过.简单滤过即可(32位下逻辑 = 线性) 物理地址: 通过分页管理机制(内核中成为PDE PTE等页目录 页表等等)将线性地址转化为物理地址. 这些了

16位汇编第五讲各种指令详解第一讲

汇编指令详解 8080指令详解 1.8086系统下,Inter指令系统共有117条指令(看似很多,分一下类) 1.数据传送类指令(专门传送数据的) 2.算术运算类指令(加减乘除的运算的) 3.位操作类指令(或  异货 与 -.) 4.串操作类指令 (内存拷贝,内存连续地址拷贝的操作) 5.控制转移类指令(跳转,比如C语言的Goto) 6.处理机控制类指令(计算机的待机 ,重启 等等,让CPU待机睡眠的指令) 学习指令的注意事项 1.指令的功能,也就是这个指令可以实现什么操作.通常的话,指令就是指

16位汇编语言第二讲系统调用原理,以及各个寄存器详解

昨天已将简单的写了一下汇编代码,并且执行了第一个显示到屏幕的helloworld 问题? helloworld怎么显示出来了. 一丶显卡,显存的概念 1.显示hello就要操作显示器,这是非常原始的,那个时候的程序员,并没有像现在的RGB(红绿蓝)这样的三色真彩色,那个时候就是操作显卡的,定义了一个标准 这个标准就是我们要往固定的地址写入数据,就会显示出来 具体流程 操作显卡 -> 显卡有自己的缓存 -> 把数据写入到显存中, - > 显示数据 (显示到屏幕上) 但是那个时候是没有字的,