汇编语言
谁不小心的
过于复杂,无法简介
展开
-
通用32位CPU 常用寄存器及其作用
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI)2个指针寄存器(ESP和EBP)6个段寄存器(ES、CS、SS、DS、FS和GS)1个指令指针寄存器(EIP)1个标志寄存器(EFlags) 1、数据寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存原创 2013-06-16 12:10:34 · 5406 阅读 · 0 评论 -
《自己动手写操作系统》源码解析——第三章pmtest5.asm
在pmtest4中,我们已经看到,对于非一致性代码,如何从低特权级转移向高特权级。但是我们该怎样从高特权级别,转移到低特权级别呢?一开始我们在实模式,是ring 0,我们怎样从ring 0到ring3 ,这个通过call和jmp没法做到,我们该通过什么方式实现?本文,主要是为你解答这些疑问,展现实现这种特权级别转移的方法。通过本节,你将学会如何在特权级之间自由切换。一、预备理论1.原创 2014-02-27 17:59:10 · 2498 阅读 · 0 评论 -
汇编串操作指令std 和 cld
CLD与STD是用来操作方向标志位DF(Direction Flag)。CLD使DF复位,即DF=0,STD使DF置位,即DF=1.用于串操作指令中。例如: MOVS ( MOVe String) 串传送指令 MOVSB //字节串传送 DF=0, SI = SI + 1 , DI = DI + 1 ;DF = 1 , SI = SI - 1 , DI = DI原创 2014-02-17 21:14:34 · 15552 阅读 · 1 评论 -
汇编语言转移指令规则汇总
摘要:虽然jmp指令提供了控制转移,但是它不允许进行任何复杂的判断。80x86条件跳转指令提供了这种判断。条件跳转指令是创建循环和实现其他条件执行语句,如if…endif的基本要素。条件跳转指令检查一个或多个标志位,判断它们是否匹配某个特殊条件(就像setcc指令):如果标志匹配成功,该指令就将控制转移到目标位置;如果匹配失败,CPU忽略该条件跳转指令而继续执行下一条指令。一些原创 2014-02-17 21:50:50 · 5009 阅读 · 0 评论 -
汇编字符串处理指令stosb、lodsb、movsw、scasb、rep
一、字符串处理指令(1) lodsb、lodsw:把DS:SI指向的存储单元中的数据装入AL或AX,然后根据DF标志增减SI(2) stosb、stosw:把AL或AX中的数据装入ES:DI指向的存储单元,然后根据DF标志增减DI(3) movsb、movsw:把DS:SI指向的存储单元中的数据装入ES:DI指向的存储单元中,然后根据DF标志分别增减SI和DI(4)转载 2014-02-17 21:30:34 · 3684 阅读 · 0 评论 -
汇编语言子程序调用call和ret
汇编语言--call和ret指令 call和ret指令call和ret指令都是转移指令,它们都修改IP,或同时修改CS和IP。它们经常被共同用来实现子程序的设计。 ret和retfret指令用栈中的数据,修改IP的内容,从而实现近转移;retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移。CPU执行ret指令时,进行下面的两步操作:(1)(IP转载 2014-02-17 22:11:21 · 11651 阅读 · 0 评论 -
保护模式编程——保护的详尽意义:通过调用门转移特权级
保护模式及其编程——保护机制摘要:在汇编语言的编程和操作系统的编写过程中,我们经常能听说到“保护模式”这个名词。为什么要叫“保护模式”呢?保护 二字的含义何在?本文主要探讨,“保护模式”下面各种具体的保护机制,这些保护机制产生的原因和具体的影响。阅读本文之前,读者需要了解基本的处理器相关知识,知道分段和分页机制的基本原理,熟悉一些基本的数据结构(段选择符、描述符、GDT、页表、CR系列寄存器等)原创 2014-02-20 22:14:57 · 4368 阅读 · 2 评论 -
8259初始化命令字(ICW1-ICW4)
8259A的中断操作功能很强,包括中断的请求、屏蔽、排队、结束、级联以及提供中断类型号和查询等操作,并且其操作的方式又有不同。它既能实现向量中断,又能进行中断查询,它可以用于16位机,也可用于8位机。因此,使用起来感到复杂且不好掌握。为此,以8259A的操作功能为线索,来讨论为实现这些功能的各个命令字的含义,为编程使用8259A提供一些思路。ICW1~ICW4在初始化程序中设定,且在整个工作过转载 2014-03-06 23:04:45 · 33819 阅读 · 3 评论 -
ATT汇编简介
前言:汇编语言,对下取决于体系结构;对上取决于汇编器。在linux下,GCC编译出来的汇编默认为ATT语法的汇编,本文主要介绍ATT汇编:操作数长度、立即数表示方法,寄存器引用,操作数顺序,符号常量,内存引用等。1,操作数的长度 操作数的长度用加在指令后的符号表示 b(byte, 8-bit), w(word, 16-bits), l(long, 32-原创 2014-06-26 17:46:41 · 2357 阅读 · 0 评论 -
int 15h中断获取内存信息
在启动分页机制之前,我们要设置页目录和页表信息,理论上,我们利用一页内存(4k)来存放页目录,用1k页(4M)来存放页表,可以表示4G的内存。但是我们的内存不一定就是固定4G的,可能是1G,512MB或者更小,而且除了要知道内存容量的大小,我们更想知道各段内存地址的type,因为编程时,属性为reserved的段不能被程序分配使用。 基于以上问题,我们在启动分页机制之前,利用0E82转载 2014-02-27 22:32:41 · 5473 阅读 · 3 评论 -
nasm汇编之 BITS
摘要:我们都有感触,汇编语言不像C语言,没有可移植的特性,有intel的汇编,AT&T的汇编,win32汇编程序,IBM汇编程序,gas汇编程序,nasm汇编程序。那么这些汇编程序有什么区别?汇编语言的语法是指的什么?某些汇编语言中的BITS 32是什么意思呢?本文主要为你解决这些疑问。1.开篇汇编语言的语法风格,主要取决于底层硬件和使用的汇编器。汇编指令的两大风格分别是Int原创 2014-02-16 22:39:10 · 5006 阅读 · 0 评论 -
C嵌入汇编
概述:linux内核源码中,有很多C语言中嵌入了汇编语句,如何理解这些汇编语句,对理解内核有很重要的作用。 具有输入和输出参数的嵌入式汇编语句的基本格式为: asm("汇编语句" :输出寄存器 :输入寄存器原创 2013-07-16 16:42:52 · 2377 阅读 · 1 评论 -
gcc -fomit-frame-pointer 选项与软件优化与调试
优化你的软件时,发觉"-fomit-frame-pointer"这个选项还是蛮有用的。GCC手册上面这么说:Don't keep the frame pointer in a register for functions that don't need one. This avoids the instructions to save, set up and restore frame转载 2013-08-29 10:30:54 · 7391 阅读 · 0 评论 -
汇编基础——常用寄存器及其用途
通用寄存器的主要用途寄存器的分类寄存器主 要 用 途通用寄存器数据 寄存器AX乘、除运算,字的输入输出,中间结果的缓存AL字节的乘、除运算,字节的输入输出,十进制算术运算AH字节的乘、除运原创 2013-05-14 19:50:08 · 2046 阅读 · 2 评论 -
《自己动手写操作系统》第三章a/pmtest1.asm
[html] view plaincopy 1 ; ========================================== 2 ; pmtest1.asm 3 ; 编译方法:nasm pmtest1.asm -o pmtest1.com 4 ; ==========================================转载 2013-05-27 10:31:21 · 2497 阅读 · 0 评论 -
自己动手写操作系统之汇编基础——as86汇编和GNU as汇编简介与对比
概述:在自己动手写操作系统的时候,往往在开始阶段对汇编语言感到困难。汇编语言之所以会感觉困难,往往是既是因为偏底层,而我们平时接触的多为高级语言;另一方面是由于其平台相关性:C语言是通用的,但汇编不是。这就是说,intel和MIPS上的汇编语言是不同的,因为它们底层支持的机器指令集就不同,这是汇编向下的一方面;另一方面,向上,即使在一类处理器上,汇编语言也会因为编译器的不同而有所差别,这也正是本文原创 2013-05-15 10:18:14 · 6073 阅读 · 0 评论 -
32位处理器内寄存器简介
摘要:在32位CPU中,还有各种各样的寄存器。一些寄存器是通用的,一些寄存器是专用的。一些指令如add、loop,如果后面没有完整的寄存器操作数,说明它们使用了隐含的操作数,这样的话,我们需要对每个寄存器的常规用途比较了解。本文,主要是一个汇总和浅要介绍,帮你理清32位寄存器的主要用途。原创 2014-02-24 15:33:31 · 1461 阅读 · 0 评论 -
int 21——dos系统调用 表
AH功能调用参数返回参数00程序终止(同INT 20H)CS=程序段前缀01键盘输入并回显AL=输入字符02显示输出DL=输出字符03异步通迅输入AL=输入数据04转载 2014-02-26 23:18:50 · 5627 阅读 · 0 评论 -
自己动手写操作系统源码剖析——第三章 pmtest4.asm
摘要:本系列文章,主要解答orange‘s 《自己动手写操作系统》中的各种疑问。pmtest4这个程序,我们主要将讲解如何通过调用门实现低特权级代码向高特权级别的代码转移——就像鲤鱼越龙“门”。按照以往的惯例,我们仍然采用分段的方式,分析代码:1.先看看头文件:=====================================================原创 2014-02-27 14:43:17 · 1831 阅读 · 0 评论 -
栈破坏下crash的分析方法
在众多的coredump中,有一类crash调试起来是最麻烦的,那就是“栈被破坏”导致的函数调用回溯结构破坏引发的coredump。本文,主要讲讲这一类crash的成因、原理以及调试方法。1. SMTC(show me the code)首先,让我们来看一段代码#include <stdio.h>#include <string.h>void fun(int n...原创 2019-02-13 10:30:57 · 2579 阅读 · 0 评论