3. 寻址方式与指令系统
算术运算类指令
加法指令(Addition) 带进位加法指令(Add with carry) 加1指令(Increment) 减法指令(Subtraction) 带借位减法(Subtract with borrow) 减1指令(Decrement) 求负数指令(Negative)
加法指令(Addition)
指令格式:add dest,src 功能:目的操作数和源操作数相加,其和数 存放在目的操作数中,源操作数原有内容不 变。 根据相加结果设置标志寄存器中的CF、PF、 AF、ZF、SF和OF。 Add指令可以进行字或字节操作。 对src和dest的具体内容的要求。
加法指令
Add ax,bx Add al,bl Add cx,20 Add cl,0A4h Add dl,da_byte Add da_word[si],dx 对于第四条指令,如果(cl) = 0e5h,
指令格式
双操作数指令:OPR DEST,SRC 单操作数指令:OPR DEST 无操作数指令:OPR
传送类指令
数据传送指令(move) mov dest,src 可以进行字节数据传送,也可以进行字数据 传送。 mov cl,05h ;字节传送 mov ax,1234h ;字传送 mov da_byte,12h ;字节传送 mov da_word,1234h ;字传送
位操作类指令
逻辑运算指令(Logical) 测试指令(Test) 移位/循环移位指令(shift/rotate) 处理器控制类指令
逻辑运算指令(Logical)
数据传送指令(move)
寄存器之间的传送 mov dl,cl ;字节传送 mov ax,bx ;字传送 mov ds,ax ;通用寄存器和段寄存器之间的 传送
数据传送指令(move)
寄存器和存储单元之间的传送 mov dl,da_byte ;字节传送 mov ax,da_word ;字传送 mov da_byte,cl ;字节传送 mov ds_word,bx ;字传送
8086/8088的8种寻址方式
立即数寻址(Immediate addressing) 指令中所需操作数包含在指令代码中,立即 数操作数可以是8位,也可以是16位。由于在 指令执行过程中,立即数作为指令的一部分 直接从BIU的指令序列中取出,同寄存器寻址 方式一样,不需另外占用总线周期,因此这 种寻址方式执行速度快。
第三章 寻址方式与指令系统
寻址方式
操作码(指示指令应完成的具体操作) 操作数(表示指令的操作对象) 寻找指令中所需操作数的各种方法叫寻址方 式。 Intel 8086/8088 CPU指令所需操作数类型。
8086/8088的8种寻址方式
寄存器寻址(Register Addressing) 指令中所需操作数在CPU某寄存器(通用寄 存器和段寄存器)中,由于存取这种操作数 完全在CPU内部进行,不需要执行总线周期, 所以执行速度快。如: mov cl,al mov dh,bl mov dx,cx mov ds,ax
组成EA或偏移量的3个地址分量
位移量 位移量是指令中的一个8位或16位二进制数,在源 代码中通常以变量名或标号的形式出现。 基地址 由基址寄存器BX、基址指针BP提供的地址分量。 变址 由源变址寄存器SI或目的变址寄存器DI所提供的地 址分量。
由三地址分量组合得到的存储器寻址 方式
直接寻址(Direct addressing) 在寻找存储器中操作数时,EA直接由位移量 给出。 用符号表示:mov bx,ds:var mov ah,data_byte mov cl,da + 3 用常数表示:mov ax,ds:[100h] 注意与它区分:mov ax,100h
求负数指令(Negative)
指令格式:neg dest 指令功能:dest 0 – (dest) 对目的操作数的要求。 若已知(al) = 13h(00010011b),那么指令neg al的执行结果:(al) = 0edh= 11101101b 若已知(da_byte) = 0afh(10101111b),那么 指令neg da_byte的执行结果是:(da_byte) = 51h(01010001b)。
34
地址传送指令
装入地址指针 作用:装入段基址和偏移量 由用段基址和偏移量均为16 bit,所以需要2 个寄存器:一个段寄存器和一个通用寄存器。 指令格式:lds dest,src ; les dest,src 指令对标志寄存器各位均无影响。 Lds si,addr_table[bx]的执行情况。P35 图3.16
8086/8088的8种寻址方式
立即数寻址(Immediate addressing) mov bx,0a427h mov cl,12 mov bx,”ab” mov dh,”a” mov ax,1234h mov ah,0abh
8086/8088的8种寻址方式
宏汇编源程序中使用的逻辑地址形式: 段基址:偏移量 段基址存放于段寄存器中;而偏移量表示需 要访问的存储单元与段起始地址之间的距离。 偏移量是由CPU的执行单元EU来确定和计算 的有效地址(EA)
数据传送指令(move)
两个存储单元间的数据传送 mov dl,da_byte1 mov da_byte2,dl 即mov指令的源操作数和目的操作数只能是其中之 一为存储器操作数,不能两者同时为存储器操作数。 两个存储单元间的数据交换 mov cl,da_byte1 mov dl,da_byte2 mov da_byte1,dl mov da_byte2,cl
由三地址分量组合得到的存储器寻址 方式
基址寻址和变址寻址 操作数的有效地址EA是基址寄存器或变址寄 存器给出的分量与指令中给出的位移量之和。 mov ax,10h[si] mov ax,array[bx] mov table[di],al mov tabz[bp],bl mov ax,ds:10h[si] mov ax,ds:array[bx] mov ds:table[di],al mov ss:tabz[bp],bl
带进位加法指令(add with carry)
指令格式:adc dest,src 指令差异:若在adc指令前CF已置1,则在两 操作数相加之和中再加1。 Dest (dest) + (src) + cf 设置cf、pf、af、zf、sf和of。 指令主要用于大于16位数的加法中。
带进位加法指令(add with carry)
减法指令(Subtraction)
指令格式:sub dest,src 指令格式:dest (dest) – (src) 影响标志位;cf,pf,af,zf,sf和of 可以进行字节或字减法运算。 对src和dest的使用要求。
减法指令
Sub ax,bx Sub al,bl Sub cx,300h Sub dx,da_word Sub da_byte,dl 如果(dl)= 0a9h,而(da_byte)=0b7h,最后一 条指令的运行情况和影响的标志位。
地址传送指令
装入有效地址(load Effective Address) 指令格式:lea dest,src SRC必须是一个字节或字的存储器操作数。 Dest必须为一个16bit的通用寄存器。 作用:将源操作数的偏移量(即有效地址EA) 送入目的操作数的通用寄存器中。 LEA和MOV指令的区别? P 图3.13、图3.14
现有一个32位无符号数已存放在AX(高16 位)、BX(低16位)中,现要加上一个常数 376425h。可以用下面两条指令来实现: add bx,6425h adc ax,37h
加1指令(Increment)
指令格式:inc dest 指令功能:将目的操作数加1,并送回目的操 作数。 目的操作数可以是8位或16位的通用寄存器或 存储单元。 影响标志位:pf,af,zf,sf,of(不影响cf) Inc cl、inc si、inc count
由三地址分量组合得到的存储器寻址 方式
寄存器间接寻址(Register indirect addressing) 操作数有效地址EA(偏移量)直接从基址寄 存器(BX或BP)或变址寄存器(SI或DI)中 获得,例如: mov ax,[bx] (段基址寄存器:DS) mov bh,[bp] (段基址寄存器:SS) mov cl,[si] (段基址寄存器:DS) mov [di],bx (段基址寄存器:DS)
指令系统
传送类指令(Transfer instructions) 算术运算类指令(Arithmetic instructions) 位操作类指令(Bit manipulation instructions) 串操作类指令(String instructions) 程序转移类指令(Program transfer instructions) 处理器控制类指令(Processor control instructions)
带借位减法(subtract with borrow)
指令格式:sbb dest,src 指令功能:dest (dest) – (src) – cf 影响标志位:cf,pf,af,zf,sf和of。
减1指令(decrement)
指令格式:dec dest 指令功能:目的操作数减1,并送回目的操作 数。 目的操作数可以为一个8位或16位的寄存器或 存储单元。 影响标志位:pf,af,zf,sf,of(不影响cf)
标志传送指令(flags transfer)
标志进栈指令(Push Flag) 指令格式:pushf 作用顶部 字单元中。
标志传送指令(flags transfer)
标志出栈指令(pop flag) 指令格式:popf 作用:首先将现行堆栈顶部的一个字的内容 送入标志寄存器,然后sp加2。
存储器寻址方式归纳总结
P30 图3.9
串操作寻址(String addressing)