汇编语言
csdn_gddf102384398
这个作者很懒,什么都没留下…
展开
-
x86寻址和保护模式笔记
x86寻址和保护模式笔记原创 2022-11-27 17:58:56 · 376 阅读 · 0 评论 -
x86实模式,加载程序为什么要将应用程序加载到16字节对齐的物理内存地址处?
x86实模式,加载程序为什么要将应用程序加载到16字节对齐的物理内存地址处?原创 2022-11-24 17:36:07 · 229 阅读 · 0 评论 -
内存映射IO(MMIO)和IO端口
操作系统原创 2022-06-13 19:07:02 · 1186 阅读 · 0 评论 -
Linux下C语言嵌入AT&T汇编
main.c#include <stdio.h>int a;int main(){ asm( "pusha #this is a note\n" "movl $1,a\n" //a is a memory address "movl a,%eax\n" "add $2,%eax\n" "movl %eax,a\n" "popa" ); printf...原创 2019-09-29 19:40:02 · 307 阅读 · 0 评论 -
linux下AT&T汇编之helloworld
hello.s.section .rodata str: .ascii "Hello,world!\n".section .text.globl _start_start: movl $4,%eax movl $1,%ebx movl $str,%ecx movl $13,%edx int $0x80 movl $1,%eax movl $0,%ebx int ...原创 2019-09-29 19:01:38 · 248 阅读 · 0 评论 -
x86架构之实模式和保护模式的简单分析
x86的工作方式有实模式和保护模式两种。在实模式下,段寄存器存放的都是段地址,是用于寻址的,实模式可寻址的空间为1MB,如图所示:而在保护模式下,分段的思想仍然存在,但此时段寄存器的内容已不是段地址,而是段选择子, x86下可寻址的空间是4GB,保护模式下将这4GB的连续空间根据安全属性划分成段,段寄存器存放的是段选择子,而具体的段的安全属性需要64位的存储空间才能描述,这64位的数据称为段...原创 2019-08-27 08:54:22 · 434 阅读 · 0 评论 -
为什么使用EBP而不用ESP作为访问局部变量的指针的解释、函数调用
EBP默认也使用SS作为段寄存器,C语言函数的形参和局部变量是存储在堆栈中的,并采用EBP作为访问它们的指针。在进入子函数开始,先将EBP压栈以保存其初值,然后将ESP赋给EBP,这样就可以通过EBP进行相对寻址来存取局部变量了。为什么不用ESP呢,因为ESP在程序中可能经常用到,比如通过PUSH和POP成对操作来访问一些临时数据:...push ax;程序执行过程中,需要使用ax保存一些中间...原创 2019-08-25 12:38:09 · 736 阅读 · 0 评论 -
实模式与保护模式、C语言程序的内存布局
在实模式中,程序可以自己定义一个段,使SS:SP指向这个段,从而将这个段作为栈来使用,之后的push,pop指令都是在操作这个段。但是在保护模式下,出于安全考虑,操作系统为应用程序安排好了所有的段(包括栈段),程序中的push,pop指令都是操作的由操作系统管理的栈内存,比如函数开始调用时需要入栈,函数调用结束时需要出栈等,这些操作的内存段都是操作系统管理的栈段,也就是说程序无法操作SS这样的段寄...原创 2019-04-03 10:55:53 · 487 阅读 · 0 评论 -
逻辑地址、线性地址、物理地址的解释
一、在保护模式下,有以下三个地址概念:1、逻辑地址2、线性地址3、物理地址其中逻辑地址又叫做相对地址或偏移地址,无论是使用C语言还是汇编语言编程,程序中所用到的地址都是逻辑地址,逻辑地址在程序编译链接后就确定了。在x86环境下,线性地址是从0x00000000到0xFFFFFFFF之间的一个地址,线性地址由段描述符中的段基址+逻辑地址构成,而段描述符由段选择子确定。线性地址到物理地址的...原创 2019-03-22 11:15:00 · 1275 阅读 · 0 评论 -
C语言中的内存地址
C语言中,指针变量的值其实是虚拟地址的偏移部分。虚拟地址=段基址+偏移量。而段基址由段选择子决定。原创 2019-03-21 18:18:50 · 2391 阅读 · 0 评论 -
8086汇编中关于CPU是如何知道每次读取指令的长度的解释
指令由操作码和操作数两部分组成。CPU在设计好之后,其指令集就确定了,CPU对每条指令都规定了相应的机器码,不同寻址方式的指令,不同运算的指令,它们的机器码都不相同。CPU刚开始读取指令时并不知道将会执行什么指令,它将指令地址发到地址总线,然后指令将“逐字节”地通过数据总线传送到CPU中,当CPU读取到指令中的操作码(前几个字节)时,就知道了当前指令的长度,于是就知道接下来应该读取多少字节的数据作...原创 2018-11-20 22:34:43 · 3972 阅读 · 0 评论