汇编
fxnfk
这个作者很懒,什么都没留下…
展开
-
进位CF 溢出OF
进位标识CF(Carry Flag)针对无符号数加法。 溢出标识OF(OverFlow Flag)针对有符号数加法。假设数值用3位二进制表示。进位比较好理解,两个数相加,如果第四位有为1,就代表有进位。溢出是针对有符号数,用补码表示,首位表示符号,后面数值用补码表示。有符号数用补码表示,补码可以这样理解: 顺时针代表正数,逆时针代表负数,-1和7是同一个位置,1和7就互为补...原创 2018-05-03 15:19:43 · 2058 阅读 · 0 评论 -
嵌入式汇编(内联汇编)
嵌入式汇编基本格式:asm("汇编语句" : 输出寄存器 : 输入寄存器 : 会被修改的寄存器);输出寄存器:表示这段汇编执行完之后,哪些寄存器用于存放输出数据。 这些寄存器会分别对应一C语言表达式值或一个内存地址;输入寄存器:表示在开始执行汇编代码时,这里指定的一些寄存器中应存放的输入值,它们也分别对应着一C变量或常数值。会被修改的寄存器:表示你已经对其中列出的寄存器中的...原创 2018-07-25 17:41:22 · 4524 阅读 · 0 评论 -
分析一个ELF文件
在计算机科学中,是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储格式文件。 是UNIX系统实验室(USL)作为应用程序二进制接口(Application Binary Interface,ABI)而开发和发布的,也是Linux的主要可执行文件格式。 1999年,被86open项目选为x86架构上的类Unix操作系统的二进制文件标准格式,用来取代COFF。因其可扩展性与灵活性,也可应...原创 2018-07-25 16:22:17 · 437 阅读 · 0 评论 -
寄存器变量
转自:https://blog.csdn.net/hyqsong/article/details/46766565之前竟然没听过c语言还有寄存器,好可怜,我是小白请见谅,哈哈简单总结了几条关于register变量应该知道的东西,如下:1.寄存器变量可以用来优化加速c语言程序2.声名只需在类型前多加register 即可,eg register int quick; (quick...转载 2018-07-25 15:10:18 · 2492 阅读 · 0 评论 -
nasm汇编
参考:https://blog.csdn.net/Lirx_Tech/article/details/42340619原创 2018-07-19 17:29:53 · 754 阅读 · 0 评论 -
汇编直接在显存地址写字符显示
汇编器:nasm 虚拟机:bochs 操作系统:mac osx将汇编代码写入磁盘的0柱面,0磁道,1扇区,开机启动后bios会自动加载这512字节到内存0x7c00处,然后跳到这开始执行。在屏幕上显示字符,可以直接写到显存里,就直接在屏幕上显示出来了,显存地址从0x8000开始,每个字符占两个字节,一个字节存放字符,一个字节存放这个字节的显示属性。 具体可参考王爽汇编语言实验9。...原创 2018-07-19 17:19:03 · 4480 阅读 · 0 评论 -
利用bios中断在屏幕上显示字符和读磁盘
写两个汇编文件,来模拟引导程序和内核程序。引导扇区负责把内核程序读到内存中(通过bios 0x13中断),读入内存后,通过判断是否读成功,在屏幕上显示不同的提示字符(通过bios 0x10中断)。bootsect.sBOOTSEG equ 0x7c0section .text vstart=0jmp BOOTSEG:startstart: mov ax, cs ...原创 2018-07-19 16:29:01 · 997 阅读 · 0 评论 -
在64位Linux系统上使用汇编和C语言混合编程
nasm -f elf -o foo.o foo.asm gcc -c -o bar.o bar.c ld -s -o foobar foo.o bar.o汇编用nasm编译器,C语言用gcc编译,但链接的时候出错了:ld: i386 architecture of input file `foo.o' is incompatible with i386:x86-64 output...原创 2018-07-23 16:16:28 · 615 阅读 · 0 评论 -
汇编
汇编中定义数组与变量:汇编这样可以直接读写内存的程序也需要用到变量。但它不像其它高级语言那样把变量分成许多类型,它是按照变量的长度来区分的,所以定义(define)变量时就用5个不同的关键字:DB,DW,DD,DQ,DT(事实上常用的只有DB,DW) DB(DEFINE BYTE)即定义的变量占一个字节的长度(也可以说把定义的变量值放入一个字节的内存空间) 如: a DB 7h ;意思是...原创 2018-07-04 15:57:20 · 538 阅读 · 4 评论 -
实模式下的寻址
8086CPU有20根地址总线,能寻址的能力是1M,但8086CPU是16位结构,也就是寄存器是16位的,没有办法直接给出20位的地址。于是采用一种用两个16位寄存器合成一个20位的物理地址。 地址加法器采用物理地址=段地址∗16+偏移地址物理地址=段地址∗16+偏移地址物理地址=段地址*16+偏移地址的方式。8086CPU有4个段寄存器:CS、DS、SS、ES。CS和IP指示了...原创 2018-06-02 16:18:19 · 1832 阅读 · 1 评论 -
寄存器
不同的CPU,寄存器的个数、结构是不相同的。 8086CPU有14个寄存器:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。8086CPU的所有寄存器都是16位的,可以存放两个字节。 AX、BX、CX、DX这个四个是通用寄存器,存放一般性的数据。8086CPU的上一代CPU中的寄存器是8位的,为了保证兼容性,使原来基于上代CPU编写的程序稍加修改就...原创 2018-06-01 18:11:22 · 408 阅读 · 0 评论 -
内存地址空间
如果地址线是32位,那可寻址的范围是4G,内存地址从0-0xffffffff。BIOS在内存最高地址处,最低1M空间内又有很多固定的用途,如下图所示: (图片出自:赵炯——Linux内核完全剖析——基于0.12内核,图2-4)我原来不明白,ROM和RAM是连着的吗?还是把ROM BIOS拷贝到RAM中的指定位置。后来看到王爽老师的《汇编语言》才明白,原来上图只是个逻辑存储器,实际是由...原创 2018-06-01 17:23:23 · 5278 阅读 · 0 评论 -
十进制数转化为二进制数
十进制整数→→\rightarrow二进制6=11026=11026=110_2整数转化为二进制,就用除2取余的方法。 6=2∗3+0=2∗(2∗1+1)+0=22∗1+21∗1+20∗0=1102(151)(152)(153)(154)(151)6=2∗3+0(152)=2∗(2∗1+1)+0(153)=22∗1+21∗1+20∗0(154)=1102\begin{align}6&...原创 2018-03-21 18:30:17 · 2312 阅读 · 0 评论 -
汇编的整个过程
编译masm.exe——连接link.exe——(shell)加载command.exe——运行 调试debug.exe 下载地址原创 2018-06-03 19:48:02 · 1545 阅读 · 0 评论 -
汇编调试器debug
64位win7没有debug.exe。要下载DOSBox和debug.exe。下载地址出自这(侵删) 链接:http://pan.baidu.com/s/1qXCaxD6 密码:q3mt我将DOSBox安装到了E盘,把debug.exe也拷贝到了这个E:\DOSBox-0.74目录下。修改C:\Users\pyc\AppData\Local\DOSBox这个目录下的dosbox-0....原创 2018-06-02 23:13:44 · 1918 阅读 · 0 评论 -
指令寻址
指令寻址原创 2018-05-05 21:34:34 · 936 阅读 · 0 评论 -
汇编 数据寻址
数据寻址 存储器寻址: 直接寻址: 寄存器间接寻址: 寄存器相对寻址:原创 2018-05-05 20:41:25 · 377 阅读 · 0 评论 -
函数调用
大多数CPU上的程序实现使用栈来支持函数调用操作。栈被用来传递函数参数、存储返回信息(返回地址,调用者的ebp),临时保存寄存器原有值以备恢复以及用来存储局部数据。一个栈桢由两个寄存器指定,栈底ebp,栈顶esp。Intel CPU,所有函数必须遵守的寄存器用法统一惯例: eax, edx, ecx由调用者自己负责保存,ebx, esi, edi由被调用者来保护。相关汇编指令:p...原创 2018-07-25 19:58:50 · 401 阅读 · 0 评论