汇编语言段寄存器入门

合集下载

汇编语言寄存器和指令操作的整理

汇编语言寄存器和指令操作的整理
l DI 目的变址寄存器
与DS联用, 指示数据段中某操作数的偏移量, 或与某一位移量共同构成操作数的偏移量. 串处理操作时, DI指示附加段中目的地址, 并有自动增量或减量的功能
段寄存器l CS 代码段
存放当前程序的指令代码
l DS 数据段
存放程序所涉及的源数据或结果
l SS 堆栈段
当运算结果的最高位为1时, SF为1, 否则为0. 最高位表示符号数的正和负
6. TF 跟踪标志位
用于调试程序时进入单步方式工作. TF=1时, 每条指令执行完后产生一个内部中断, 让用户检查指令运行后寄存器, 存储器和各标志位的内容. TF=0时, CPU工作正常, 不产生内部中断
7. IF 中断允许标志位
l POP DST ;出栈指令: 弹出栈顶元素, 后将栈顶指针向栈底方向移动一个字
l XCHG OPR1, OPR2 ;交换指令: 将这两个操作数交换
地址传送指令:
l LEA DST, SRC ;装载有效地址指令: 该指令将源操作数的偏移量OA装载到目的操作数中
算术运算指令加法指令:
l ADD DST, SRC ;DST+SRC的和存放到DST中去
l ADC DST, SRC ;带进位加法指令, DST+SRC+CF
l INC DST ;增1指令
减法指令:
l LOOPZ/LOOPE, LOOPNZ/LOOPNE ;前者用于找到第一个不为0的事件, 后者用于找到第一个为0的事件
子程序调用指令:
l imme: 立即数
l DST: 目的操作数
l SRC: 源操作数
l mem: 存储器操作数

《汇编语言》寄存器物理地址(第二章第二节)

《汇编语言》寄存器物理地址(第二章第二节)

DS ES SS CS 地 址 加 法 IP 器 地 址 总 线 AB
本课件由汇编网()制作提供
物理地址PA = 段地址 + 偏移地址 = ( 段寄存器 ) × 10H + 偏移地址 或段寄存器的内容左移4位,加上偏移地址
例:某内存单元的段地址由DS、偏移地址由BX给出。
2.5 16位结构的CPU

概括的讲,16位结构描述了一个CPU具有 以下几个方面特征:

1、运算器一次最多可以处理16位的数据。 2、寄存器的最大宽度为16位。 3、寄存器和运算器之间的通路是16位的。


2.6 8086CPU给出物理地址的方法


8086有20位地址总线,可传送20 位地址,寻址能力为1M。 8086内部为16位结构,它只能传送 16位的地址,表现出的寻址能力却 只有64K。
2.7 “段地址×16+偏移地址=物理地址” 的本质含义

两个比喻说明:

说明“基础地址+偏移地址 = 物理地址” 的思想:第一个比喻 说明“段地址×16+偏移地址=物理地址” 的思想:第二个比喻 8086CPU就是这样一个只能提供两张3位 数据纸条的CPU。

2.8 段的概念

错误认识:

内存被划分成了一个一个的段,每一个 段有一个段地址。
通用寄存器
数据寄存器(AX,BX,CX,DX) 地址指针寄存器(SP,BP) 变址寄存器(SI,DI)
5
2.1 通用寄存器



8086CPU所有的寄存器都是16位的, 可以存放两个字节。 AX、BX、CX、DX 通常用来存放一般 性数据被称为通用寄存器。 下面以AX为例,我们看一下寄存器的 逻辑结构。

快速入门单片机汇编语言

快速入门单片机汇编语言

快速入门单片机汇编语言简要:单片机有通用型和专用型之分。

专用型是厂家为固定程序的执行专门开发研制的一种单片机,其程序不可更改。

通用型单片机是常用的一种供学习或自主编制程序的单片机,其程序需要自己写入,可更改。

单片机根据其基本操作处理位数不同可以分为:1位、4位、 8位、16、32位单片机。

正文:在此我们主要讲解美国ATMEL公司的89C51单片机。

一、89C51单片机PDIP (双列直插式)封装引脚图:其引脚功能如下:P0 口( pO.0-p0.7):为双向三态口,可以作为输入/输出口。

但在实际应用中通常作为地址/数据总线口,即为低8位地址/数据总线分时复用。

低8位地址在ALE信号的负跳变锁存到外部地址锁存器中,而高 8位地址由P2 口输出。

P1 口( pl.O-p1.7):其每一位都能作为可编程的输入或输出线。

P2 口( p2.0- p2.7):每一位也都可作为输入或输出线用,当扩展系统外设时,可作为扩展系统的地址总线高 8位,与P0 口一起组成16位地址总线。

对89c51单片机来说,P2P3 口( p3.0- p3.7):其为双功能口,作为第一功能使用时,其功能与P1 口相同。

当作为第二功能使用时,每一位功能如下表所示P3 口第二功能Rst'Vpd :上电复位端和掉电保护端XTAL1(xtal2):外接晶振一脚,分别接晶振的一端Gnd:电源地。

Vcc:电源正级,接+5VPROG\ALE :地址锁存控制端PSEN:片外程序存储器读选通信号输出端,低电平有效。

EA\vpp :访问外部程序储存器控制信号,低电平有效。

当 EA为高电平时访问片内存储器,若超出范围则自动访问外部程序存储器。

当 EA为低电平时只访问外部程序存储器。

二、常用指令及其格式介绍:1、指令格式:[标号:]操作码[目的操作数][,操作源][;注释]例如:LOOP:ADD A,#OFFH ; (A) J(A)+FFH2、常用符号:Ri和Rn: R表示工作寄存器,i表示1和0, n表示0~7。

汇编语言入门

汇编语言入门

汇编语⾔⼊门七、CPU 指令7.1 ⼀个实例了解寄存器和内存模型以后,就可以来看汇编语⾔到底是什么了。

下⾯是⼀个简单的程序example.c。

int add_a_and_b(int a, int b) { return a + b; }int main() { return add_a_and_b(2, 3); }gcc 将这个程序转成汇编语⾔。

$ gcc -S example.c上⾯的命令执⾏以后,会⽣成⼀个⽂本⽂件example.s,⾥⾯就是汇编语⾔,包含了⼏⼗⾏指令。

这么说吧,⼀个⾼级语⾔的简单操作,底层可能由⼏个,甚⾄⼏⼗个 CPU 指令构成。

CPU 依次执⾏这些指令,完成这⼀步操作。

example.s经过简化以后,⼤概是下⾯的样⼦。

_add_a_and_b:push %ebxmov %eax, [%esp+8]mov %ebx, [%esp+12]add %eax, %ebxpop %ebxret_main:push 3push 2call _add_a_and_badd %esp, 8ret可以看到,原程序的两个函数add_a_and_b和main,对应两个标签_add_a_and_b和_main。

每个标签⾥⾯是该函数所转成的 CPU 运⾏流程。

每⼀⾏就是 CPU 执⾏的⼀次操作。

它⼜分成两部分,就以其中⼀⾏为例。

push %ebx这⼀⾏⾥⾯,push是 CPU 指令,%ebx是该指令要⽤到的运算⼦。

⼀个 CPU 指令可以有零个到多个运算⼦。

下⾯我就⼀⾏⼀⾏讲解这个汇编程序,建议读者最好把这个程序,在另⼀个窗⼝拷贝⼀份,省得阅读的时候再把页⾯滚动上来。

7.2 push 指令根据约定,程序从_main标签开始执⾏,这时会在 Stack 上为main建⽴⼀个帧,并将 Stack 所指向的地址,写⼊ ESP 寄存器。

后⾯如果有数据要写⼊main这个帧,就会写在 ESP 寄存器所保存的地址。

汇编语法大全

汇编语法大全

汇编语法大全汇编语言是一种底层的计算机语言,可以用来编写应用程序、驱动程序和嵌入式系统等。

其语法简洁、效率高,但也较为复杂。

下面是汇编语法大全,希望对大家能有所帮助。

1. 注释语句注释语句是程序员为了方便自己和他人阅读代码而添加的语句。

汇编语言中,使用分号(;)表示注释语句,写在行尾。

示例:mov ax, bx ;将bx寄存器的值赋给ax寄存器2. 标号语句标号语句用来表示程序中的一个位置,在汇编程序中可以用它来实现跳转、条件执行等功能。

标号语句必须在第一行,以字母开头,由数字、字母和下划线组成,长度不超过32个字符。

3. 数据定义语句数据定义语句用来为变量、常量分配存储空间,可以为它们指定初值。

汇编语言中,数据定义语句有三种形式:db、dw、dd。

db:定义一个字节(8位)长度的数据,可以用来存储字符、布尔型变量等。

data1 db 'A' ;定义一个字符型变量,初值为'A'4. 操作数表示操作数即指令中被操作的对象,可以是通用寄存器、内存单元、立即数等。

汇编指令中,操作数的表示方法主要有以下几种:寄存器表示法:使用寄存器的名称表示操作数,如AL、AX、DX等。

立即数表示法:表示一个常量数值,用于参与运算或存储到内存中,如100、0AH等。

内存变量表示法:使用内存变量的地址表示操作数,如[2000H]、[BX]等。

mov al, 02h ;将立即数02h赋给AL寄存器mov byte ptr ds:[bx], al ;将AL寄存器的值存储到2000h地址所指向的内存单元中5. 寻址方式汇编语言中,寻址方式用于表示操作数在内存中的地址。

汇编语言提供了多种寻址方式,例如寄存器间接寻址、基址变址寻址、相对寻址等。

寄存器间接寻址寄存器间接寻址是指操作数的地址存储在一个寄存器中。

例如,[BX]表示将BX寄存器中的值作为地址,访问该地址存储的数据。

基址变址寻址相对寻址相对寻址是指让程序计算出偏移量以便于寻址,这种寻址方式用于程序中的跳转指令。

汇编语言学习手把手的Debug教程

汇编语言学习手把手的Debug教程

汇编语⾔学习⼿把⼿的Debug教程⽬录Debug 是什么Debug 实战Debug -rDebug -dDebug -eDebug -uDebug -tDebug -a总结关于汇编的第⼀篇⽂章:Hello⼤家好,我是程序员cxuan!我们上篇⽂章了解了⼀下基本的寄存器,这篇⽂章我们来进⾏实际操作⼀下。

我们以后将会⽤到很多 Debug 命令,这⾥我们先来熟悉⼀下它们。

Debug 是什么Debug 是 Windows / Dos 操作系统提供的⼀种功能。

使⽤ Debug 能让我们⽅便查看 CPU 各种寄存器的值、内存情况,⽅便我们调试指令、跟踪程序的运⾏过程。

接下来我们会⽤到很多 debug 命令,但是使⽤这些命令的前提是,你需要在电脑上安装⼀下 debug,Windows/Mac 都可以安装,获取链接我已经给你找出来了。

阿,忘记说了,我们这⾥使⽤的是 Dos box来模拟汇编的操作环境。

下载完成后打开 DosBox ,打开之后是这样的。

此时我们输⼊ debug 命令应该提⽰的是因为我们还没有进⾏连接和挂载,此时我们执⾏mount c D:\debug执⾏这条命令时,你需要现在 D 盘下创建⼀个 debug ⽂件夹,然后我们挂载到 debug 下⾯。

并且执⾏C:切换到 C 盘路径下。

此时我们就可以执⾏ debug 命令了。

这⾥需要注意⼀点,我在 Windows 10 系统下搭建 Debug 环境时,在挂载完成后输⼊ debug ,还是提⽰ Illegal command:debug ,此时你需要再下载⼀个 debug.exe ,贴⼼的我也把下载地址给你了。

需要下载⾥⾯的 debug.exe,然后把它放在你挂载的路径下,这⾥我挂载的路径时 D 盘下的 debug ⽂件夹。

放置完成之后,再输⼊ debug 就可以了。

因为每次打开 Dosbox 都会执⾏上⾯这些命令,真的好烦,那怎么办呢?⼀个简单的办法是在 Dosbox 安装路径下找到打开之后,在末尾键⼊就 OK 了,下次直接打开 Dosbox ,会默认执⾏这三条命令,⾄此,就是我搭建 Dosbox 遇到的所有问题了。

汇编语言手册

寄存器与存储器1. 寄存器功能. 寄存器的一般用途和专用用途. CS:IP 控制程序执行流程. SS:SP 提供堆栈栈顶单元地址. DS:BX(SI,DI) 提供数据段内单元地址. SS:BP 提供堆栈内单元地址. ES:BX(SI,DI) 提供附加段内单元地址. AX,CX,BX和CX寄存器多用于运算和暂存中间计算结果,但又专用于某些指令(查阅指令表)。

. PSW程序状态字寄存器只能通过专用指令(LAHF, SAHF)和堆栈(PUSHF,POPF)进行存取。

2. 存储器分段管理. 解决了16位寄存器构成20位地址的问题. 便于程序重定位. 20位物理地址=段地址* 16 + 偏移地址. 程序分段组织: 一般由代码段,堆栈段,数据段和附加段组成,不设置堆栈段时则使用系统内部的堆栈。

3. 堆栈. 堆栈是一种先进后出的数据结构, 数据的存取在栈顶进行, 数据入栈使堆栈向地址减小的方向扩展。

. 堆栈常用于保存子程序调用和中断响应时的断点以及暂存数据或中间计算结果。

.堆栈总是以字为单位存取指令系统与寻址方式1. 指令系统. 计算机提供给用户使用的机器指令集称为指令系统,大多数指令为双操作数指令。

执行指令后,一般源操作数不变,目的操作数被计算结果替代。

. 机器指令由CPU执行,完成某种运算或操作,8086/8088指令系统中的指令分为6类: 数据传送,算术运算,逻辑运算,串操作,控制转移和处理机控制。

2. 寻址方式. 寻址方式确定执行指令时获得操作数地址的方法. 分为与数据有关的寻址方式(7种)和与转移地址有关的寻址方式(4)种。

. 与数据有关的寻址方式的一般用途:(1) 立即数寻址方式--将常量赋给寄存器或存储单元(2) 直接寻址方式--存取单个变量(3) 寄存器寻址方式--访问寄存器的速度快于访问存储单元的速度(4) 寄存器间接寻址方式--访问数组元素(5) 变址寻址方式(6) 基址变址寻址方式(7) 相对基址变址寻址方式(5),(6),(7)都便于处理数组元素. 与数据有关的寻址方式中,提供地址的寄存器只能是BX,SI,DI或BP. 与转移地址有关的寻址方式的一般用途:(1) 段内直接寻址--段内直接转移或子程序调用(2) 段内间接寻址--段内间接转移或子程序调用(3) 段间直接寻址--段间直接转移或子程序调用(4) 段间间接寻址--段间间接转移或子程序调用汇编程序和汇编语言1. 汇编程序. 汇编程序是将汇编语言源程序翻译成二进制代码程序的语言处理程序,翻译的过程称为汇编。

计算机汇编语言入门


虽然 MASM 编译器不阻止用负数值初始化 BYTE,但不是
定义数组字节
使用多个初始化值 list1 BYTE 10,20,30,40 list2 BYTE 10,20,30,40 BYTE 50,60,70,80 BYTE 81,82,83,84 list3 BYTE ?,32,41h,00100010b list4 BYTE 0Ah,20h,‘A’,22h
定义字符串
如果需要用若干行来写一条字符串,除最后一行以外,每一 行都用逗号来结束 menu BYTE ”Checking Account”,0dh,0ah,0dh,0ah, ”1. Create a new account”,0dh,0ah, ”2. Open an existing account”,0dh,0ah, ”3. Credit the account”,0dh,0ah, ”4. Debit the account”,0dh,0ah, ”5. Exit”,0ah,0ah, ”Choice> ”,0
定义 WORD 和 SWORD 数据
在内存中定义 16-bit 整数
或双字符 单值或多值
word1 WORD 65535 ; largest unsigned value word2 SWORD –32768 ; smallest signed value word3 WORD ? ; uninitialized, unsigned word4 WORD ”AB” ; double characters myList WORD 1,2,3,4,5 ; array of words array WORD 5 DUP(?) ; uninitialized array
使用 DUP 操作码
使用 DUP 为数组或字符串预留空间。语法: counter DUP(argument ) 其中,counter 和 argument 必须是常数或常数表达式 var1 BYTE 20 DUP(0) ; 20 bytes, all equal to zero var2 BYTE 20 DUP(?) ; 20 bytes, uninitialized var3 BYTE 4 DUP(”STACK”) ; 20 bytes: ”STACKSTACKSTACKSTACK” var4 BYTE 10,3 DUP(0),20 ; 5 bytes

汇编指令大全+很全的汇编指令


for Addition)
1. 调整操作如下
格式: DAA
(1) 若(AL) and 0FH>9 或 AF=1
,则(AL)<--(AL)+6,AF<--1,对低
功能: 对AL中的两个组合进制数相加的结果进行调 四位的调整.
整,调整结果仍放在AL中,进位标志放在CF中.
(2) 若(AL) and 0F0H>90H 或
6 LAHF 标志传送指令 LAHF 格式: LAHF
2. 本指令不影响状态标位,表格 长度不超过256字节.
说明: 该指令不影响FLAG的原来 内容,AH只是复制了原FLAG的低8 位内容.
功能: 取FLAG标志寄存器低8位至AH寄存器.(AH)<-
-(FLAG)7~0
7 SAHF 标志传送指令 SAHF
说明:
格式: DEC OPRD 功能: OPRD<--OPRD-1
1. OPRD 为寄存器或存储器操作 数.
2. 这条指令执行结果影响AF、 OF、PF、SF、ZF标志位,但不影 响CF标志位.
页码,4/22
星尘-易尘
302 NEG 303 CMP
304 AAS 305 DAS 306 MUL
取补指令 NEG(NEGate)
未组合的十进制加法调整指令 AAA(ASCII Adgust 说明:
for Addition)
1. 组合的十进制数和未组合的
格式: AAA
十进制数:在计算中,十进制数可
用四位二进制数编码,称为BCD
功能: 对两个组合的十进制数相加运算(存在AL中) 码.
的结果进行调整,产生一个未组合的十进制数放在
AX中.
SUB [BX+25],AX

汇编语言之寄存器(详细介绍)

汇编语言之寄存器(详细介绍)1、寄存器32位寄存器有16个,分别是:4个数据寄存器(EAX、EBX、ECX、EDX)。

2个变址和指针寄存器(ESI和EDI);2个指针寄存器(ESP和EBP)。

6个段寄存器(ES、CS、SS、DS、FS、GS)。

1个指令指针寄存器(EIP);1个标志寄存器(EFlags)。

2、数据寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。

32位CPU有4个32位通用寄存器:EAX、EBX、ECX和EDX。

对低16位数据的取存,不会影响高16位的数据,这些低16位寄存器分别命名为AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。

4个16位寄存器又可分割成8个独立的8位寄存器(AX:ah~al、BX:bh~bl、CX:ch~cl:DX:dh~dl)。

每个寄存器都有自己的名称,可独立存取。

程序员可利用数据寄存器的这种“可合可分”的特性,灵活地处理字/字节的信息。

AX和al通常称为累加器,用累加器进行的操作可能需要更少时间,累加器可用于乘、除、输入/输出等操作,它们的使用频率很高。

BX称为基地址寄存器,它可作为存储器指针来使用。

CX称为计数寄存器,在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用cl来指明位移的位数。

DX称为数据寄存器,在进行乘、除运算时,它可以为默认的操作数参与运算,也可用于存放I/O的端口地址。

在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,但在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据、保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。

3、变址寄存器32位CPU有2个32位通用寄存器ESI和EDI,其低16位对应先前CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档