汇编
mcgrady_tracy
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
8086汇编学习笔记1-基础
1. 什么是汇编语言 汇编指令是各种CPU提供的机器指令的助记符集合。CPU只认识0和1组成的机器指令,但是使用机器指令去编写的程序难于书写和阅读,所以采用汇编,汇编只是机器指令的另一种表示方法。编写好汇编程序,还需要汇编编译器将汇编翻译成机器指令,这样CPU才能识别与执行。 机器指令:1000100111011000 汇编指令:mov ax, bx 但是汇编程序并不只包含有对应机器指令的原创 2011-11-13 20:44:27 · 1062 阅读 · 0 评论 -
Linux下汇编学习-3寻址方式
<!-- p {margin-bottom:0.21cm} --> 一般的寻址格式为 ADDRESS_OR_OFFSET(%BASE_OR_OFFSET,%INDEX, MULTIPLIER) 这上面所有的字段都是可选的,最后的地址为: FINALADDRESS = ADDRESS_OR_OFFSET + %BASE_OR_OFFSET + MULTIPLIER * %原创 2011-12-05 11:46:57 · 1690 阅读 · 0 评论 -
8086汇编学习笔记6-寻址方式
寻址,寻的什么址,当然是内存,寻址方式有多种,就像我回四川一样,可以坐飞机,然后坐火车,也可以直接坐火车,当然还可以坐汽车,不过我到没有试过。 1. 操作数据的地址,有四个寄存器bx,si,di和bp可以用来对内存单元的寻址 (1)直接寻址ds:[idata] (2)寄存器间接寻址,[bx]、[si]、[di]、[bp] (3)寄存器相对寻址[bx+idata]、[si+idata]、[d原创 2011-11-13 20:49:46 · 793 阅读 · 0 评论 -
Linux下汇编学习-2
<!-- p {margin-bottom:0.21cm} --> 第二个程序 在一组数据中查找最大数,先看程序 .section .data data_items: .long 3, 67, 34, 222, 45, 75, 54, 34, 44, 33, 22, 11, 66, 0 .section .text .globl _start _start:原创 2011-12-02 15:26:15 · 1363 阅读 · 0 评论 -
Linux下汇编学习-1
<!-- p {margin-bottom:0.21cm} --> 教材:programming from the ground up 第一个程序 .section .data .section .text .globl _start _start: movl $1, %eax movl $0, %ebx int $0x80 我们给这个名字取名为ex原创 2011-12-02 15:08:15 · 1276 阅读 · 0 评论 -
exit.s
#PURPOSE: Simple program that exits and returns a # status code back to the Linux kernel # #INPUT: none # #OUTPUT: return a status code. This can be viewed # by typing # # echo $? # # after run原创 2013-10-09 22:47:23 · 918 阅读 · 0 评论 -
maximum.s
#PURPOSE: This program finds the maximum number of a # set of data items. # #VARIABLIES: The registers have the following uses: # # %edi - Holds the index of the data item being examined # %ebx -原创 2013-10-09 22:56:43 · 771 阅读 · 0 评论 -
factorial.s
#PURPOSE - Given a number, this program computes the # factorial. For example, the factorial of # 3 is 3 * 2 * 1, or 6. The factorial of # 4 is 4 * 3 * 2 * 1, or 24, and so on. # #This program sho原创 2013-10-20 20:41:45 · 765 阅读 · 0 评论 -
power.s
#PURPOSE: Program to illustrate how functions work # This program will compute the value of # 2^3 + 5^2 # #Everything in the main program is stored in registers, #so the data section doesn't have原创 2013-10-18 21:55:36 · 1041 阅读 · 0 评论 -
8086汇编学习笔记5-伪指令
伪指令不同于汇编指令,汇编指令有对应CPU能够识别的机器码,而伪指令主由编译器识别。 1. 段声明 段名 segment . . 段名 ends segment和ends是用来定义一个段,segment是一个段的开始,ends是一个段的结束,一个段必须有个名称来标识。 2. 汇编程序结束标记end end是一个汇编程序结束标记,编译器在编译汇编程序过程中,如果碰到end,就结束对源原创 2011-11-13 20:48:30 · 2094 阅读 · 0 评论 -
8086汇编学习笔记7-标志寄存器
CF,寄存器的第零位,进位标志位,在进行无符号运算时,记录运算是否有进位或借位。 PF,寄存器的第二位,奇偶标志位,记录相关指令执行后,其结果所有位中1的个数是否为偶数。 ZF,寄存器的第六位,零标志位,记录相关指令执行后,其结果是否为0。 SF,寄存器的第七位,符号标志位,记录相关指令执行后,其结果是否为负。 DF,寄存器的第十位,在串处理时,控制每次操作后si和di是增还是减。 OF原创 2011-11-13 20:51:07 · 862 阅读 · 0 评论 -
8086汇编学习笔记9-中断
中断信号可以来自CPU内部或外部。 一. 8086CPU内部中断信号有 (1) 除法错误 (2) 单步执行 (3) 执行into指令 (4) 执行int指令 1. 中断码 8086用一个字节来描述中断码,可以表示256中不同的中断信息。 除法错误中断码为0 单步执行中断码为1 执行into指令中断码为4 执行int n指令中断码为n 2. 中断向量表 用来存放中断码原创 2011-11-13 20:53:05 · 4367 阅读 · 0 评论 -
8086汇编学习笔记3-程序组织
1. 关于段地址和偏移地址 8086CPU有20位地址总线,达到1MB寻址能力,但是8086CPU又是16位结构CPU,一个寄存器只能存16位数据。所以8086用两个寄存器来表示一个20位的物理地址,一个称为段地址,一个称为偏移地址,然后由地址加法器将两个16位地址合成一个20位的物理地址。地址加法器计算物理地址公式: 物理地址=段地址*16+偏移地址 2. CS寄存器用来存放代码段段地址,原创 2011-11-13 20:46:31 · 857 阅读 · 0 评论 -
8086汇编学习笔记4-指令
汇编指令,有相对应的机器指令 1. 数据传送指令mov mov ax, bx 2. 加法指令add mov ax, 1 mov bx, 2 add ax, bx;ax=ax+bx 执行后ax值为3 3. 加1指令inc mov bx, 1 inc bx 运算后bx值为2,相当于执行add bx, 1 4. 减法指令sub mov ax, 5 mov bx, 3 sub原创 2011-11-13 20:47:37 · 1238 阅读 · 0 评论 -
8086汇编学习笔记2-寄存器
8086CPU有14个寄存器,AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。 注意:写汇编程序时,不区分大小写,编译器都能识别。 1. 通用寄存器 AX、BX、CX、DX这四个寄存器通常用来存放一般数据,称为通用寄存器。这四个寄存器都可以当作两个独立的8位寄存器来用。AH,AL, BH, BL, CH, CL, DH, DL。 2. 段寄存器 CS原创 2011-11-13 20:45:21 · 883 阅读 · 0 评论 -
Linux下汇编学习-4
<!-- p {margin-bottom:0.21cm} --> #PURPOSE:This program will compute the value of # 2^3 + 5^2 .section .data .section .text .globl _start _start: pushl $3 pushl $2 call power add原创 2011-12-05 16:08:24 · 1050 阅读 · 0 评论 -
IA32寄存器
<!-- p {margin-bottom:0.21cm} --> Basic program execution registers (基本的编程寄存器) 包含8个通用寄存器,6个段寄存器,一个程序状态寄存器和一个指令指针寄存器。 8个32位通用寄存器包括eax, ebx, ecx, edx, esi, edi, ebp和esp,eax的低16位可以当作一个独立的1原创 2011-12-02 14:24:51 · 2547 阅读 · 0 评论 -
Linux下AT&T语法同Intel语法区别
<!-- p {margin-bottom:0.21cm} --> 在linux下汇编使用的是AT&T汇编语法,同在windows上的Intel语法有所区别 总结一下AT&T同Intel语法区别 1 AT&T的立即数前面要加上$符号,比如$4 2 AT&T的寄存器前面要加上%符号,比如%eax 3 AT&T源操作数和目标操作数同Intel语法位置相反,例如movl$4翻译 2011-12-01 16:56:29 · 850 阅读 · 0 评论 -
8086汇编学习笔记8-转移指令
修改IP,或同时修改CS和IP的指令称为转移指令 只修改IP时,称段内转移,段内转移又分为短转移和近转移,是根据IP修改范围不同而区分的,短转移修改IP范围为-128~127,近转移修改IP范围为-32768~ 32767。 同时修改CS和IP时,称段间转移,也称远转移 1. jmp为无条件转移指令,可以修改IP,也可以同时修改CS和IP (1) jmp short 标号,段内短转移,s原创 2011-11-13 20:52:09 · 1286 阅读 · 0 评论 -
8086汇编学习笔记10-端口
8086CPU有两种地址空间,一是内存地址空间,二是端口地址空间,访问端口只能用in和out指令,分别用于从端口读数据和往端口写数据,CPU最多可以定位64KB个不同的端口,端口地址范围为0~65535。 在访问端口时,只能用ax或al来存放从端口读取的数据和往端口写入的数据,8位端口用al,16位端口用ax。 在访问端口号为0~255时在指令中直接给出端口号。 in al, 20h ou原创 2011-11-13 20:53:53 · 3564 阅读 · 0 评论
分享