Assembly
cherisegege
这个作者很懒,什么都没留下…
展开
-
lodsb、stosb(和lodsw、stosw和lodsd、stosd指令)
lodsb、stosb(和lodsw、stosw和lodsd、stosd指令) -->lodsb 指令:从esi 指向的源地址中逐一读取一个字符,送入AL 中; (然后,可以先判断这个字符是什么字符,如0dh,0ah 之类等,再执行相应的操作); -->stosb 指令:一般跟随在lodsb 指令后面,将AL 中的字符逐一写入edi 指向的目的地址; 当方向标志位D=0时,则esi自动...转载 2018-04-07 18:13:41 · 6864 阅读 · 1 评论 -
DAA
十进制数加调整指令DAA(Decimal Adjust After Addition)该指令是用于调整AL的值,该值是由指令ADD或ADC运算二个压缩型BCD码所得到的结果。压缩型BCD码是一个字节存放二个BCD码,低四位和高四位都是一个BCD码。其调整规则如下:1、如果AL的低四位大于9,或标志位AF=1,那么,AL=AL+6,并置AF=1;2、如果AL的高四位大于9,或CF=1,那么,AL=A...转载 2018-04-07 17:56:10 · 3281 阅读 · 0 评论 -
8086地址传送指令LDS,LES
LDS REG,OPRE;REG是一个16位寄存器,OPRD是一个存储器操作数,为双字项,高16位送入DS,低16位送入REGLDS BX,[SI](ds:si取得存储器中32位(双字),高16位作为段值送入DS中,低十六位送入指定的BX寄存器中)data segment idata dd 12345678H data ends code segment assume cs:code,ds:d...转载 2018-04-06 16:25:12 · 1884 阅读 · 0 评论 -
seg指令
bootsect.S分析一文中有这样一段代码:seg fslds si,(bx) ! ds:si是源地址;!! 将fs:bx地址所指的指针值放入ds:si中;先讲一下寄存器的默认组合问题,比如指令mov [si], ax表示将ax中的内容存入ds:si指向的内存单元,也就是说在寄存器间接寻址的情况下,以si间接寻址时总是默认以ds为相应的段地址寄存器。同样di是以es为默认的段地址寄存器。第二个...转载 2018-04-06 16:20:28 · 16494 阅读 · 0 评论 -
8086汇编基础 push,pop指令执行时,sp怎么变
首先需要说明的是栈属于满递减栈,即栈顶在高地址,栈底在低地址push,指针向低处走。我向1000:0000处push数据,那么push之前,sp初-2=sp末。先sp-2,再写入pop,指针向高处走。我要提取1000:0000处的数据。那么pop之前,sp=0002。先读取,后sp+2也就是说 sp 始终指向了有效数据的位置。一. 栈的执行过程下图:该图注意如下:1. 任意时刻, SS:SP指向栈...原创 2018-04-06 16:14:20 · 18347 阅读 · 2 评论 -
What is the “FS”/“GS” register intended for?
The registers FS and GS are segment registers. They have no processor-defined purpose, but instead are given purpose by the OS's running them. In Windows 64-bit the GS register is used to point to ope...转载 2018-04-06 15:34:23 · 322 阅读 · 0 评论 -
movsb movsw movsd 指令详解
这三个指令,都是数据传送指令,都是从源地址向目的地址传送数据。16位模式下: 源地址是DS:SI,目的地址是ES:DI 32位模式下: 源地址是DS:ESI,目的地址是ES:EDI注意:在传送完成之后,SI和DI(或者ESI和EDI)会增加或者减小。 当DF=0 时,表示正向传送,传送之后SI和DI(或者ESI和EDI)的值会增加; 当DF=1 时,表示反向传送,传送之后SI和DI(或者ESI和E...转载 2018-04-06 14:09:25 · 1771 阅读 · 0 评论 -
x86寄存器说明
ebp和esp是32位的SP,BP esp是堆栈指针 ebp是基址指针 ESP与SP的关系就象AX与AL,AH的关系.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、数据寄存器数...转载 2018-04-06 13:59:15 · 411 阅读 · 0 评论 -
MOVW 和 rep
MOVW:将DS:SI的内容送至ES:DI,是复制过去,原来的代码还在。很多书用了“移”这个字,实际上是复制过去。Linux内核中引导部分一开始有这样一段代码:45 entry start ! 告知连接程序,程序从start 标号开始执行。46 start:47 mov ax,#BOOTSEG ! 将ds 段寄存器置为0×7C0;48 mov ds,ax49 mov ax,#INITSEG ! 将...转载 2018-04-06 13:49:05 · 2023 阅读 · 0 评论 -
8086汇编指令快速参考
Complete 8086 instruction set Quick reference:AAA AAD AAM AAS ADC ADD AND CALL CBW CLC CLD CLI CMC CMP CMPSB CMPSW CWD DAA DAS DEC DIV HLT IDIV IMUL IN INC INT INTO IRET JA JAE JB JBE JC JCXZ JE JG J...转载 2018-04-07 21:49:36 · 1768 阅读 · 0 评论 -
汇编跳转指令
汇编指令: JO、JNO、JB、JNB、JE、JNE、JBE、JA、JS、JNS、JP、JNP、JL、JNL、JNG、JG、JCXZ、JECXZ、JMP、JMPE 名称 功能 操作数操作码模数寄存器1寄存器2或内存位移量立即数符号方向芯片型号16位32位JO溢出跳转短$70无无无无10无无8086无无JNO不溢出跳转短$71无无无无10无无8086无无JB低于跳转短$72无无无无10无无8086...转载 2018-04-07 21:28:15 · 17373 阅读 · 0 评论 -
8086逻辑移位指令SHL和SHR
SHL逻辑左移指令SHL OPRD M;把操作数OPRD左移M位,M为位移次数,为1或为CL(位移超过1次用CL表示) ;每移动一位右边用0补足一位,移出的最高位进入CF(最后移出的一位写入CF) MOV AL,00010011B ;13H 00010011B SHL AL,1 ;把AL左移1位,移出的最高位0进入CF,右边0补足1位 0 00100110B MOV AL,0...转载 2018-04-07 19:59:09 · 2724 阅读 · 0 评论 -
JMP跳转指令的指令长度、直接转移与间接转移、段内跳转与段间跳转
原文链接:https://blog.csdn.net/liuchuo/article/details/51990669 指令长度=操作码的长度+操作数地址的长度1.段内跳转JMP指令占1个字节。操作数的地址长度 = (目标地址-指令当前地址)//若能用1个字节表示,则占用1个字节,那么整体指令长度为2个字节;若需2个字节表示,则占用2个字节,此时整体指令为3个字节。比...转载 2018-05-18 22:25:09 · 9423 阅读 · 0 评论