汇编
Farmwang
博采众长,兼收并蓄!
展开
-
PIC与非PIC的优缺点
dfdd原创 2017-07-16 18:59:55 · 800 阅读 · 0 评论 -
Move 指令寻址方式
1:Moving immediate data to registers and memorymovl $0, %eax # moves the value 0 to the EAX registermovl $0x80, %ebx # moves the hexadecimal value 80 to the EBX registe原创 2017-07-23 17:32:57 · 1814 阅读 · 0 评论 -
汇编.fill标记
.section .databuffer:.fill 10000The .fill directive enables the assembler to automatically create the 10,000 data elements for you. The default is to create one byte per field, and fill it with原创 2017-07-23 17:03:21 · 2378 阅读 · 0 评论 -
符号定义伪指令
GNU平台无关符号定义伪指令.global,.local,.set,.equ.global使得符号对连接器可见,变为对整个工程可用的全局变量.global symbol.local表示符号对外部不可见,只对本文件可见.local symbol.set给一个全局变量或局部变量赋值,和.equ的功能一样.set symbol转载 2017-08-07 19:21:59 · 1337 阅读 · 1 评论 -
汇编5
1:目的操作数和源操作数不能同时用存储器寻址方式,这个限制适用于所有指令。:2:目的操作数DST和源操作数SRC不允许同时为段寄存器;:3:目的操作数DST不能是CS,也不能用立即数方式。4:POP指令的DST不允许是CS寄存器5:用[0]表示一个内存单元时,0表示单元的偏移地址,段地址默认在ds中,单元的长度(类型)可以由具体指令中的其他操作对象(比如说寄存器)指原创 2017-07-17 21:50:43 · 11388 阅读 · 0 评论 -
汇编4
.section .data汇编程序中以.开头的名称并不是指令的助记符,不会被翻译成机器指令,而是给汇编器一些特殊指示,称为汇编指示(Assembler Directive)或伪操作(Pseudo-operation),由于它不是真正的指令所以加个“伪”字。.section指示把代码划分成若干个段(Section),程序被操作系统加载执行时,每个段被加载到不同的地址,操作系统对不同的页面设原创 2017-07-17 21:50:13 · 249 阅读 · 0 评论 -
汇编3
“.”开头的行都是指导汇编器和链接器的命令,我们通常可以忽略这些行。INC 自增1 increaseDEC 自减1 decreaseJGE 前>=后 Jump if not greater or equalJG 前>后 Jump if not greaterJLE 前JL 前JNE 前不等于后 Jump if not equalJE 前原创 2017-07-17 21:49:47 · 199 阅读 · 0 评论 -
汇编2
call指令分为两步:(1) 将当前的IP或者CS和IP压入栈中。(2) 转移。格式汇编语法解释call 标号 push IP jmp near ptr 标号call far 标号 push CS push IP jmp far p原创 2017-07-17 21:49:17 · 160 阅读 · 0 评论 -
汇编1
条件码: 条件码寄存器描述了最近的算数或逻辑操作的属性。 CF:进位标志,最高位产生了进位,可用于检查无符号数溢出。进位时置1,否则置0 OF:溢出标志,二进制补码溢出——正溢出或负溢出。溢出时为1,否则置0 ZF:零标志,结果为0。 运算结果为0时ZF位置1,否则置0 SF:符号标志,操作结果为负。 结果为负时置1,否则置0. AF(Auxiliary car原创 2017-07-17 21:48:46 · 273 阅读 · 0 评论 -
The bss section
原创 2017-07-20 22:59:27 · 311 阅读 · 0 评论 -
汇编值标识
原创 2017-07-20 22:36:37 · 221 阅读 · 0 评论 -
汇编语言标识
1:The .globl directive declares program labels that are accessible from external programs.2:The control bus is used to synchronize the functions between the processor and the individual system el原创 2017-07-20 21:46:09 · 299 阅读 · 0 评论 -
strace 与系统调用
系统调用号与调用名称对应的关系原创 2017-07-29 16:05:22 · 291 阅读 · 0 评论 -
call
☞call和ret指令指令功能汇编语法解释备注ret用栈中的数据,修改IP的内容,实现近转移。pop IP retf用栈中的数据,修改CS和IP的内容,实现远转移。pop I转载 2017-07-16 18:59:26 · 370 阅读 · 0 评论 -
64位寄存器分配的不同
64位寄存器分配的不同区别有:64位有16个寄存器,32位只有8个。但是32位前8个都有不同的命名,分别是e _ ,而64位前8个使用了r代替e,也就是r _。e开头的寄存器命名依然可以直接运用于相应寄存器的低32位。而剩下的寄存器名则是从r8 - r15,其低位分别用d,w,b指定长度。32位使用栈帧来作为传递的参数的保存位置,而64位使用寄存器,分别用rdi转载 2017-07-15 09:12:14 · 1489 阅读 · 0 评论 -
指令movabsq
movabsq是新增的指令。用来将一个64位的值直接存到一个64位寄存器中。 现在的栈帧经常是固定大小的,在函数调用的最开始被设定,在整个调用期间,栈顶指针保持不变,这就可以通过对其再加上偏移量来对相应的值进行操作。原创 2017-08-09 21:03:23 · 5740 阅读 · 2 评论 -
The MOVS instruction
The MOVS instruction was created to provide a simple way for programmers to move string data from one memory location to another.The MOVS instructions use implied source and destination operands. Th原创 2017-07-24 19:54:40 · 566 阅读 · 0 评论 -
The REP prefix
It is used to repeat a string instruction a specific number of times, controlled by the value in the ECX register, similar to using a loop, but without the extra LOOP instruction.The REP instr原创 2017-07-25 22:36:50 · 380 阅读 · 0 评论 -
汇编open file
int open(const char *pathname, int flags, mode_t mode);1:The pathname is the full null-terminated file path including any subdirectories。2:The flags input value determines the file access allowed原创 2017-07-29 11:24:05 · 548 阅读 · 0 评论 -
汇编Writing to Files
.section .datafilename: .asciz "cpuid.txt"output: .asciz "the processor Vendor ID is'XXXXXXXXXXXXXXX'\n".section .bss .lcomm filehandle,4.section .text.globl _start_start:nop movl $0,%ea原创 2017-07-29 10:41:56 · 235 阅读 · 0 评论 -
Comparing system calls and C libraries
use the -c strace option for program, you should get different。The major reasons to use raw Linux system calls are as follows:❑ It creates the smallest size code possible because no external原创 2017-07-26 23:12:10 · 241 阅读 · 0 评论 -
Advanced System Call Return Values
int sysinfo(struct sysinfo *info);The sysinfo system call uses a single input value, which points to a memory location to hold the structurethat contains the returned data. The man page also shows原创 2017-07-26 22:55:07 · 269 阅读 · 0 评论 -
System call return value
The return value from a system call is placed in the EAX register. It is your job to check the value in the EAX register, especially for failure conditions..section .bss.lcomm pid, 4.lcomm uid, 4原创 2017-07-26 22:46:53 · 425 阅读 · 0 评论 -
Using System Calls
The Linux system calls are located at interrupt 0x80. When the INT instruction is performed, all operations transfer to the system call handler in the kernel. When the system call is complete, execu原创 2017-07-26 22:20:39 · 315 阅读 · 0 评论 -
Finding system calls
/usr/include/asm/unistd.h#ifndef _ASM_X86_UNISTD_64_H#define _ASM_X86_UNISTD_64_H 1#define __NR_read 0#define __NR_write 1#define __NR_open 2#define __NR_close 3#define __NR_stat 4#defin原创 2017-07-26 22:03:25 · 402 阅读 · 0 评论 -
Finding a string length
One extremely useful function of the SCAS instruction is to determine the string length of zero-terminated(also called null-terminated) strings. These strings are most commonly used in C programs, b原创 2017-07-25 23:00:35 · 271 阅读 · 0 评论 -
Scanning for multiple characters
The SCASW and SCASL instructions walk down the string looking for the character sequence in the AX or EAX registers, but they do not perform a character-by-character comparison. Instead, the EDI r原创 2017-07-25 22:56:21 · 254 阅读 · 0 评论 -
Scanning Strings
The SCAS instructionThe SCAS family of instructions is used to scan strings for one or more search characters. As with the other string instructions, there are three versions of the SCAS instructi原创 2017-07-25 22:52:59 · 211 阅读 · 0 评论 -
String inequality
When comparing two strings of different lengths, the comparison is based on the number of characters in the shorter string.1:If the shorter string would be greater than the same number of characte原创 2017-07-25 22:46:50 · 223 阅读 · 0 评论 -
Using REP with CMPS
the REP instruction does not check the status of the flags between repetitions; remember that it is only concerned about the count value in the ECX register.The solution is to use the other inst原创 2017-07-25 22:44:03 · 276 阅读 · 0 评论 -
Comparing Strings
The CMPS family of instructions is used to compare string values.❑ CMPSB: Compares a byte value❑ CMPSW: Compares a word (2 bytes) value❑ CMPSL: Compares a doubleword (4 bytes) valueEach ti原创 2017-07-25 22:41:47 · 315 阅读 · 0 评论 -
Storing and Loading Strings
Besides moving strings from one memory location to another, there are also instructions for loading string values in memory into registers, and then back into memory locations. This section describe原创 2017-07-25 22:38:51 · 200 阅读 · 0 评论 -
跳转指令
跳转指令分三类:一、无条件跳转: JMP;二、根据 CX、ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转)、JECXZ(ECX 为 0 则跳转);三、根据 EFLAGS 寄存器的标志位跳转, 这个太多了.L小于Lower G大于 greater E equal Z zero O overflow 根据标志位跳转的指令:JE ;等于则跳转转载 2017-07-14 16:24:56 · 2005 阅读 · 0 评论 -
leal 指令
lea, load effective address,LEA指令的功能是取偏移地址, 指令形式是从存储器读数据到寄存器, 效果是将存储器的有效地址写入到目的操作数, 类似, C语言中的”&”.它的指令形式是从存储器读数据到寄存器,但实际上它根本就没有引用存储器。 他只是取地址但是并没有取地址对应的值。address generation unit(AGU)lea指令只有一个周期,转载 2017-07-14 11:34:29 · 12363 阅读 · 4 评论 -
寄存器
mov 寄存器名 内存单元地址(偏移地址,段地址在DS中),[ ]说明操作对象的源地址是一个内存单元,8086CPU会自动取ds中的数据作为内存单元的段地址。ds中的数据位内存单元的段地址。 由于8086CPU硬件设计的缘故,它不支持用mov指令将地址数据直接写到段地址寄存器中,只能先写到某个通用寄存器中,然后再写到段地址寄存器中1. 这里将使用一个描述性的原创 2015-11-27 22:50:43 · 557 阅读 · 0 评论 -
汇编基础之寄存器
1.专用寄存器1): IP(instruction pointer)指令指针寄存器,用来存放代码段中的偏移地址。2):SP 堆栈指针寄存器,用来存放栈顶的偏移地址3):Flags 标志寄存器,又称状态寄存器(program status word;PSW) (1) : OF (overflow flag)溢出标志:在运算过程中如果操作数超出了机器表示的范围称原创 2015-11-28 14:53:28 · 429 阅读 · 0 评论 -
NASM 数据传送指令
r8——任意一个8位通用寄存器AH/AL/BH/BL/CH/CL/DH/DLr16——任意一个16通用寄存器AX/BX/CX/DX/SI/DI/BP/SPreg——代表r8或r16seg——段寄存器CS/DS/ES/SSm8——一个8位存储器操作数单元(包括所有主存寻址方式)m16——一个16位存储器操作数单元(包括所有主存寻址方式)mem——代表m8或m16i8——一原创 2015-11-27 21:35:01 · 2163 阅读 · 0 评论 -
I/O 指令
输入输出指令。外部设备通过I/O端口与处理器交换信息。输入指令IN将外设数据传送至CPU,而输出指令则将CPU数据传送至外设。8086中,只有这组指令能够实现与外设的信息交换,并且只能利用AL/AX寄存器与I/O端口通信。1、输入指令ININ AL,i8 ;字节输入:AL←I/O端口 i8IN Ax,i8 ;字输出: AL←I/O转载 2015-11-27 21:48:10 · 9114 阅读 · 0 评论 -
myos loadtest
org 07c00h mov ax,cs mov ds,axmov es,ax mov ah,0x02 ;ah=0x02,即为读磁盘扇区到内存mov al,0x01 ;AL 置要读的扇区数目 ;mov ch,0x00 ;CH 磁道号的低8位数mov cx,0x0001;cl 开始扇区(位0—5),磁道号高二位(位6—7)mov dl,原创 2015-11-25 21:49:19 · 307 阅读 · 0 评论 -
函数帧
函数帧 这标题一念出来我立刻想到了一个名人:白素贞……当然,此女与本文无关,下面进入正题:其实程序运行就好比一帧一帧地放电影,每一帧是一次函数调用,电影放完了,我们就看到结局了。 我们用一个递归求解阶乘的程序来看看这个放映过程(fac.c):[cpp] view plaincopy#include int fa转载 2015-11-26 20:00:55 · 475 阅读 · 0 评论