![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
x86
Accesspeng
这个作者很懒,什么都没留下…
展开
-
8086条件转移指令JNE,JNZ
JNZ/JNE指令格式 转移条件 说明JNZ/JNE 标号 ZF=0 不等于0或不相等转移 code segmentassume cs:code mov ax,5 mov bx,2 cmp ax,bx ;两数比较 不相等则转移 jne okiout: mov ax,4c00H int 21Hok: add ax,bx jmp ioutcode e原创 2013-06-18 11:51:55 · 11009 阅读 · 1 评论 -
或操作指令OR
逻辑”或”操作指令OR(逻辑加法) 0+0=0 0+1=1 1+0=1 1+1=1在给定的逻辑变量中,A或B只要有一个为1,其逻辑加的结果为1;两者都为1则逻辑加为1。 MOV AL,01100011B OR AL,10000000B ;按位根据加法表进行运算 ;结果AL= 11100011B另一种说法是用1将相应位设为1原创 2013-06-16 19:47:31 · 3868 阅读 · 0 评论 -
与操作指令AND
逻辑”与”操作指令AND(逻辑乘法) 0*0=0 0*1=0 1*0=0 1*1=1只当参与运算的逻辑变量都同时取值为1时,其逻辑乘积才等于1。 MOV AL,01100011B AND AL,11111110B ;按位根据乘法表计算;结果AL=01100010B另一种说法是用”0”来把相应位设置成0 MOV AL,01100011B原创 2013-06-16 19:35:23 · 1693 阅读 · 0 评论 -
测试指令TEST
测试指令TEST TEST OPRD1,OPRD2 ;按位与操作,但不保存结果,仅影响标志寄存器,根据影响的标志位得到结果 该指令通常用于检测某些位是否为1,但不改变原操作值.根据ZF得知判断结果 mov al,01100011B;检测位6是否为1,如果为1那么ZF=0,如果为0那么ZF=1 TEST AL,01000000B ;AL=01000000B 第六位为1 ,运算结果中有1原创 2013-06-16 11:27:27 · 6442 阅读 · 1 评论 -
栈
栈是一种具有特殊的访问方式的存储空间,它的特殊在于后进先出SS:SP指向的存储单元为栈空间(栈的操作都为字操作)SS:SP始终指向栈顶当栈为空是SP指针指向栈顶元素为栈中最后一个字单元地址+2也可以说当栈为空时SP指向栈中最后一个存储单元的下一个单元stack segmentdw 8 dup(0);我们定义一个段使SS:SP指向这个段此时为栈段stack ends定义了16个字节的栈空间,内存单元原创 2013-06-13 12:10:37 · 620 阅读 · 0 评论 -
8086标志寄存器FLAG
8086CPU提供一个特殊的寄存器称为标志寄存器,里面包含9个标志,用来反映处理器的状态和运算结果的某些特征。FLAG是按位起作用的原创 2013-06-15 13:00:48 · 952 阅读 · 0 评论 -
8086段寄存器
8086有四个段寄存器CS,DS,SS,ES任意时刻CPU执行CS:IP指向的指令,CS为代码段寄存器(IP为指令指针寄存器)任意时刻SS:SP指向栈的栈顶单元,SS为栈段寄存器我们寻找数据需要知道数据在内存的位置用DS寻址 DS为数据段寄存器ES为附加段寄存器可作为目的地址的段地址比如ES:DI原创 2013-06-15 09:57:26 · 1862 阅读 · 0 评论 -
8086移位指令
8086有如下3条一般移位指令SAR OPRD,M ;算术右移 对无符号数和有符号数而言右移1位相当于原数除以2SHR OPRD,M ;逻辑右移 对无符号数右移1位相当于原数除以2SHL OPRD,M/SAL OPRD,M ;逻辑/算术左移(两个助记符只有一个机器指令,进行相同的动作)左移1位相当于原数*2原创 2013-06-14 23:41:45 · 1610 阅读 · 0 评论 -
8086加法指令ADD
加法指令ADD(ADDition) ADD OPRD1,OPRD2 ;OPRD1 ;完成OPRD1与OPRD2相加 ,结果保存在OPRD1中CODE SEGMENT MOV AX,1 MOV BX,2 ADD AX,BX ;AXCODE ENDS参与运算的操作数类型必须保持一致,同为字节或字可组合以下几种形式: ADD 寄存器,数据 ADD 寄存器,寄存器 ADD原创 2013-06-13 23:23:05 · 6228 阅读 · 0 评论 -
8086减法指令SUB
减法指令SUB(SUBtraction) SUB OPRD1,OPRD2 ; OPRD1都影响FLAG标志寄存器,同样的包含两种含义(有符号减法和无符号减法)原创 2013-06-14 08:46:14 · 5364 阅读 · 0 评论 -
逻辑运算 或,与,非
逻辑变量之间的运算称为逻辑运算。二进制数1和0在逻辑上可以代表“真”与“假”、“是”与“否”、“有”与“无”。这种具有逻辑属性的变量就称为逻辑变量。 计算机的逻辑运算的算术运算的主要区别是:逻辑运算是按位进行的,位与位之间不像加减运算那样有进位或借位的联系。 逻辑运算主要包括三种基本运算:逻辑加法(又称“或”运算)、逻辑乘法(又称“与”运算)和逻辑否定(又称“非”运算)。此外转载 2013-06-16 11:12:10 · 12574 阅读 · 0 评论 -
算术运算与逻辑运算
逻辑运算又称布尔运算,取值只有两个真或假,二进制数1和0在逻辑上可以代表真与假,是与否算术运算...小学就开始学的了两者的区别在与逻辑运算是按位进行的,位与位之间没有进位或借位.逻辑加法(OR)OR OPRD1,OPRD2 ;OPRD1<--OPRD1 + OPRD2 算术加法(ADD)ADD OPRD1,OPRD2 ;OPRD1逻辑乘法(AND)AND OPRD1,OPR原创 2013-06-17 11:47:30 · 2176 阅读 · 0 评论 -
条件转移指令和无条件转移指令练习
无条件转移指令JMP条件转移指令JEJNEJB 低于转移(小于)JNB 不低于转移(大于等于)JA 高于转移(大于)JNA不高于转移(小于等于)查找出数据中0~9的无符号数写到itable单元中0~9 大于等于0 小于等于9 用JNB和JNA最合适不过了 贴代码~assume cs:code,ds:datadata segment idata db 1,0,4原创 2013-06-18 13:33:34 · 4723 阅读 · 0 评论 -
8086条件转移指令JE,JZ
JZ/JE指令格式 转移条件 说明JZ/JE 标号 ZF=1 等于0或相等转移code segmentassume cs:code mov ax,2 mov bx,2 cmp ax,bx je ok ;如果ax=bx 进行转移(其实是检测ZF的值进行转移操作) ;根据ZF=1 得出ax=bx ,所以才有ax=bx原创 2013-06-18 11:42:35 · 11228 阅读 · 0 评论 -
8086条件转移指令JE/JZ,JNE/JNZ
JE/JZ,JNE,JNZ检测的只是ZF的值,只要ZF满足则进行转移JE的逻辑含义是相等则转移 但是JE进行操作的是ZF=1才执行所有相等则转移是通过CMP指令来配合使用体现出的CMP AX,BX ;ax-bx 结果是否为0 {true ,ZF=1} {false ,ZF=0}JE OK (ZF=1说明两数相等) (ZF=0说明两数原创 2013-06-18 12:05:08 · 16924 阅读 · 1 评论 -
8086地址传送指令LEA,LDS,LES
LEA BX,[SI] ;BX<--DS:[SI]内存单元的偏移地址,与该单元中的数据无关LDS BX,[SI] ;BX<--DS:[si]内存单元中的数据的低16位,DS<--内存单元中数据的高16位LES BX,[SI] ;BX<--DS:[SI] ,ES<--DS:[SI+2]显然LDS和LES的操作数是32位的(两个字 四个字节 32位)原创 2013-06-17 18:25:43 · 8799 阅读 · 1 评论 -
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 12345678Hdata endscode segmentassume cs:code,原创 2013-06-17 17:51:52 · 7927 阅读 · 0 评论 -
8086标志操作指令
标号传送指令 LAHF 把FLAG低八位送入AH。不影响FLAG的任何位 LAHF ;把CF,PF,AF,ZF,SF送入AH的相应位即0,2,4,6,7位 `SAHF 把AH送入FLAG低八位。根据AH中的内容FLAG的低八位受到影响,高位不受影响 MOV AH,11111111B SAHF ;(执行后CF,PF,AF,ZF,SF等于1) `PUSHF 把FLAG原创 2013-06-17 14:03:43 · 1435 阅读 · 0 评论 -
8086地址传送指令LEA
LEA REG,OPRD ;操作数OPRD必须是一个存储器操作数LEA AX,IDATA ;把IDATA的偏移地址传送到AX寄存器中DATA SEGMENT IDATA DW 1,2,3,4DATA ENDSCODE SEGEMNTBEG: MOV AX,OFFSET IDATA ;AX=IDATA的偏移地址 LEA AX,IDATA ;AX=原创 2013-06-17 13:41:56 · 1104 阅读 · 0 评论 -
8086交换指令XCHG
XCHG OPRD1,OPRD2;实现OPRD1与OPRD2之间数据交换 ;OPRD1,OPRD2同时是字节或字操作数,MOV AX,1MOV BX,2XCHG AX,BX ;执行后AX=2,BX=1原创 2013-06-17 13:24:45 · 2431 阅读 · 0 评论 -
非操作指令NOT
否操作指令NOT(又称逻辑非运算) 0=1 ;非0等于1 1=0 ;非1等于0 NOT OPRD ;该指令把操作数OPRD取反然后送回OPRD mov ah,11111111B ;FFH not ah ;执行后AH=0H mov ah,11110000B ;F0H not ah ;执行后AH=000011原创 2013-06-17 11:53:06 · 6008 阅读 · 0 评论 -
8086 INC, DEC
INC OPRD ;OPRD ;自加1指令 code segment mov ax,0 inc ax ;ax inc ax ;ax code endsDEC OPRD ;OPRD ;自减1指令 code segment mov ax,5 dec ax ;ax code ends原创 2013-06-14 08:58:15 · 2627 阅读 · 0 评论 -
8086变址和指针寄存器
SI和DI称为变址寄存器,在字符串操作中SI作为源指针,DI作为目的指针(ES:DI ;用作存储器指针时可用于寻址 DS:[SI],DS:[BX+DI]BP和SP称为指针寄存器,BP称为基址针,SP为堆栈指针 ;BP也可作为存储器指针DS:[bp+si],如果没有段前缀那么BP最为堆栈基址[BP]寻址的是堆栈内存IP指令指针 CS:IP指向CPU执行的指令原创 2013-06-15 10:47:47 · 2199 阅读 · 1 评论 -
8086数据寄存器
8086CPU有四个16位数据寄存器可分成8个8位寄存器AX(AH,AL)|BX(BH,BL)|CX(CH,CL)|DX(DH,DL)数据寄存器主要用来保存操作数和保存运算结果等AX 常用作累加器(accumulator)用来保存临时数据比如MOV AX,DATA将数据段地址送入AX ;MUL BL,DIV BX用来保存乘除法的结果BX 基(Base)地址寄存器,作为存原创 2013-06-15 10:34:38 · 800 阅读 · 0 评论 -
内存地址空间
一个存储器(内存)被划分为若干个存储单元,一个存储单元可存储一个字节(Byte)CPU可寻址到多少个存储单元即这些存储单元就是CPU的内存地址空间如8086CPU有20根地址线可寻址1M的存储单元,那么这个1M个可寻址到的存储单元就构成这个CPU的内存地址空间而实际的存储器可以是RAM,ROM等,CPU都把它们当作内存看待看成由若干存储单元构成的逻辑存储器即我们所说的内存地址空间它的大原创 2013-06-10 15:06:36 · 725 阅读 · 0 评论 -
8086寻址方式
8086寻址8086为16位机,所能表示的地址为0~65535(64K),而8086CPU提供了20条地址线所能发出的地址信息范围0~FFFFFH(1M)所以8086采用 段地址*16+偏移地址 的方式进行寻址CS:IP =0C2CH:0010H 得到的最终物理地址为 0C2CH*16+0010H=0C2D0H段地址*16最为常用的说法是左移4位段地址*16(左移4原创 2013-06-10 13:31:19 · 826 阅读 · 0 评论 -
存储器与寄存器
存储器:(主存储器即内存条)存放程序及数据供CPU存取,RAM读写存储器,ROM只读存储器等。寄存器:CPU内部的高速存储单元,为处理单元提供各种所需地址数据等。原创 2013-06-10 13:30:03 · 6125 阅读 · 0 评论 -
相遇
CPU直接识别的唯一语言是机器语言,为了克服机器语言的缺点,便将机器指令用便于记忆、并能描述指令功能的符号来表示称为指令助记符简称助记符汇编语言由汇编指令,伪指令,和其它符号组成汇编指令:机器码的助记符,有对应的机器码伪指令:没有对应的机器码由编译器执行其它符号:没有对应的机器码由编译器识别汇编语言是一种符号语言但本质上还是机器语言原创 2013-06-09 08:42:12 · 413 阅读 · 0 评论 -
地址总线 数据总线
地址总线:CPU地址总线的宽度决定了它能寻址多少个内存单元地址,一个CPU有N根地址总线那么它的寻址能力为2^N次方。8086CPU地址总线宽度为20可寻址2^20次方个内存单元地址大小为1M。80386地址总线宽度为32可寻址内存为4GB数据总线:CPU与存储器之间的数据传送是通过数据总线进行的,它的宽度决定了传送速度。8根数据总线一次可传送8位二进制数据(一个字节)16根数原创 2013-06-09 22:41:35 · 1344 阅读 · 0 评论 -
标志寄存器FLAG
FLAG标志寄存器按位操作,FLAG是16位寄存器,第0位为CF标志第2位为PF标志...如图(FLAG各标志位以及在DEBUG中对应的显示):原创 2013-06-10 19:05:04 · 667 阅读 · 0 评论 -
存储器
存储器以字节为单位存储信息,一个存储单元存储一个字节。一个字需要用两个连续的存储单元。每一个存储单元有唯一的地址,称为存储单元地址。原创 2013-06-10 13:23:43 · 409 阅读 · 0 评论 -
8086寄存器组
寄存器(14个)|AX,BX,CX,DX,SP,BP,SI,DI,IP,FLAG,CS,DS,SS,ES|>通用寄存器``数据寄存器(存放一般数据) AX (AH,AL) | BX (BH,BL) | CX (CH,CL) | DX (DH,DL)``指针寄存器`堆栈指针 `基址指针 SP BP (SS:SP)``变址原创 2013-06-10 12:24:25 · 620 阅读 · 0 评论 -
相知
MARK Ing...原创 2013-06-09 12:22:11 · 432 阅读 · 0 评论 -
分段机制
根据编程需要可将地址连续的内存单元看作是一个段段地址*16来定位段的起始地址偏移地址来定位这个段中的各个单元 一个段的大小最大为64K,因为偏移地址是16位,16位的寻址能力为64KDS:[BX] = 0C8C:0000 ; 段地址为0C8CH ; 偏移地址0H~FFFFH 大小为64K 0C8C:FFFF 一般汇编源程序包原创 2013-06-11 19:44:34 · 393 阅读 · 0 评论 -
操作符offset和seg
offset获得标号的偏移地址seg获得标号的段地址 mov ax,offset begin jmp ax mov ds,axbegin: add ax,bx -u0CA0:0000 B80700 MOV AX,0007 ;编译器已经把标号变成add ax,bx处的地址了0CA0:0003 FFE0 JMP AX原创 2013-06-11 21:14:41 · 3304 阅读 · 0 评论 -
8086算术移位指令SAL和SAR
SAL算术左移指令同逻辑左移指令进行相同动作,机器指令一样,只是为了方便记忆而提供的两个助记符SAR算术右移指令SAR OPRD,M ;该指令使操作数右移M位,每移动1位左边的符号保持不变,移出的最低位进入CF mov al,26H ;00100110B 右移1位 = 00010011B sar al,1 ;26H/2H=13H mov ax,0F0H mov cl,4 ;11原创 2013-06-14 23:22:47 · 10868 阅读 · 0 评论 -
8086乘法指令MUL,IMUL
对于加减指令来说CPU对有符号加减和无符号加减一视同仁,根据我们需要把它作为有符号的结果还是无符号的结果,但是乘除法指令区分有符号乘除和无符号乘除指令无符号数乘法指令MUL(MULtiply)MUL OPRD(OPRD可以用除立即数以外的任何寻址方式) OPRD是八位一个乘数默认在AL中 则:AL*OPRD 结果保存在AX中 OPRD是16位一个乘数默认在AX中 则:AX*OPRD原创 2013-06-14 09:18:54 · 10431 阅读 · 0 评论 -
8086除法指令DIV,IDIV
无符号除法指令DIV(DIVision) DIV OPRD ;除数OPRD决定是8位除法还是16位除法;OPRD=8位,则被除数默认在AX中,AX除以OPRD的商保存在AL中,余数保存在AH中;OPRD=16位,则被除数默认在DX与AX中,结果的商保存在AX中,余数保存到DX中assume cs:codedata segment db 2,4data endscode segment原创 2013-06-14 14:33:59 · 7314 阅读 · 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原创 2013-06-14 23:13:24 · 8943 阅读 · 0 评论 -
PUSH/POP
栈操作指令PUSH 寄存器/段寄存器/内存单元POP 寄存器/段寄存器/内存单元PUSH AX1)SP=SP-2 ,SS:SP指向新的内存单元2)将AX送入SS:SP指向的内存单元POP AX1)将SS:SP指向的内存单元处的数据送入AX中2)SP=SP+2原创 2013-06-13 15:18:08 · 575 阅读 · 0 评论