这篇文章主要介绍了汇编语言 寄存器内存访问原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
在内存中字的存储
这段话的主要意思是:一个字=2B=16bit,CPU中是用两个内存单元储存一个字(假如获取0地址存放的字型数据,就是获取它的高位字节0+1位和低位字节0位的数据,数据由高地址位向低地址位读)
问题:
(1)0地址单元中存放的字节型数据是多少? # 20H
(2)0地址字单元中存放的字型数据是多少? # 4e20H
(3)2地址字单元中存放的字节型数据是多少? # 12H
(4)2地址单元中存放的字型数据是多少? # 0012H
(5)1地址字单元中存放的字型数据是多少? # 12aEH
结论:就是我上面说的,字型数据就是它和它的下一位地址单元的数据(数据由高地址位向低地址位读)
数据段寄存器DS和偏移量[address]
用法和cs和ip差不多,都是段寄存器的值*16+偏移量的值
为给DS数据段寄存器值
因为CPU的段寄存器都比较害羞,没法给他们直接赋值(cs代码寄存器用的是jmp cs:ip),所以段寄存器采用以下方法赋值
字的传送
问题1:
内存中的情况如下图,写出下面指令执行后寄存器ax,bx,cx中的值?
解析:
问题2:
内存中的情况如下图,写出下面指令执行后寄存器ax,bx,cx中的值?
解析:
NB的move指令
sub,add指令
数据段
我们上面操作的实际上就是数据段,具体来看下是怎样操作数据段的
累加123B0H~123BAH的内存单元的操作
小结:
(1)字在内存中存储时 ,要用两个地址连续的内存单元来存放,字的低位字节存放在低地址单元中,高位字节存放再高地址单元中。
(2)用 mov 指令要访问内存单元,可以在mov指令中只给出单元的偏移地址,此时,段地址默认在DS寄存器中。
(3)[address]表示一个偏移地址为address的内存单元。
(4)在内存和寄存器之间传送字型数据时,高地址单元和高8位寄存器、低地址单元和低8位寄存器相对应。
(5)mov、add、sub是具有两个操作对象的指令。jmp是具有一个操作对象的指令。
(2) 内存中的情况如图3.6所示
各寄存器的初始值:cs=2000h,ip=0,ds=1000h,ax=0,bx=0;
① 写出CPU执行的指令序列(用汇编指令写出)。
② 写出CPU执行每条指令后,CS、IP和相关寄存器的数值。
③ 再次体会:数据和程序有区别吗?如何确定内存中的信息哪些是数据,哪些是程序?
答案:我以为jmp了以后cp的值也会改变,实际上就是它jmp的内个CP:IP
指令序列 |
CS |
IP |
DS |
AX |
BX |
|
初始值 |
2000h |
0 |
0 |
0 |
0 |
|
1 |
mov ax,6622h |
2000h |
3h |
0 |
6622h |
0 |
2 |
jmp 0ff0:0100 |
ff0h |
100h |
0 |
6622h |
0 |
3 |
mov ax,2000h |
ff0h |
103h |
0 |
2000h |
0 |
4 |
mov ds,ax |
ff0h |
105h |
2000h |
2000h |
0 |
5 |
mov ax,[8] |
ff0h |
108h |
2000h |
c389h |
0 |
6 |
mov ax,[2] |
ff0h |
10bh |
2000h |
ea66h |
0 |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍汇编语言之寄存器详解,包括了汇编语言之寄存器详解的使用技巧和注意事项,需要的朋友参考一下 上图是cpu中三个组成部分:寄存器 运算器 控制器。其中寄存器是cpu中程序员用指令读取的唯一部件(调剂界面中的 寄存器窗口)。如果是16位cpu,就是处理,传输,暂时存储的数据长度都是16位。所以16位的cpu,寄存器也是16位。《汇编语言》这本书中使用的是16位寄存器位例子来讲的,所以下面的
本文向大家介绍汇编语言之寄存器(详细介绍),包括了汇编语言之寄存器(详细介绍)的使用技巧和注意事项,需要的朋友参考一下 1、寄存器 32位寄存器有16个,分别是: 4个数据寄存器(EAX、EBX、ECX、EDX)。 2个变址和指针寄存器(ESI和EDI);2个指针寄存器(ESP和EBP)。 6个段寄存器(ES、CS、SS、DS、FS、GS)。 1个指令指针寄存器(EIP);1个标志寄存器(EFla
本文向大家介绍汇编语言中的各种寄存器介绍,包括了汇编语言中的各种寄存器介绍的使用技巧和注意事项,需要的朋友参考一下 汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成
本文向大家介绍16位汇编语言寄存器及指令整理(小结),包括了16位汇编语言寄存器及指令整理(小结)的使用技巧和注意事项,需要的朋友参考一下 寄存器 通用寄存器 8位寄存器 16位寄存器 32位寄存器 寄存器名称 AH,AL AX EAX 累加寄存器 BH,BL BX EBX 基地址寄存器 CH,CL CX ECX 计数器寄存器 DH,DL DX EDX 数据寄存器 SI ESI 源变址寄存器 DI
我正在为一个操作系统分配编写内联汇编代码。我有一些关于内联汇编和gcc编译器将其转换为机器代码的问题。 null
x86的通用寄存器有eax、ebx、ecx、edx、edi、esi。这些寄存器在大多数指令中是可以任意选用的,比如movl指令可以把一个立即数传送到eax中,也可传送到ebx中。但也有一些指令规定只能用其中某些寄存器做某种用途,例如除法指令idivl要求被除数在eax寄存器中,edx寄存器必须是0,而除数可以在任意寄存器中,计算结果的商数保存在eax寄存器中,而原来的被除数被覆盖掉,余数保存在ed