首页 汇编语言期末总结

汇编语言期末总结

举报
开通vip

汇编语言期末总结汇编语言基础知识程序设计语言分哪三类?答:(1)机器语言(2)汇编语言(3)高级语言2、十进制数用D(Decimal)、二进制数用B(Binary)、八进制数用O(Octal)、十六进制数用H(Hexadecimal)来表示。由于英文字母O容易和零误会,所以也可以用Q来表示八进制数。★任意进制数的通式:其中为整数部分,为小数部分,r为基数。每一项的数字可用0~r-1数字中的一个数字来表示。、3、进制转化:(1)十进制数与二进制数之间的转换:1)十进制整数转换成二进制整数:除2取余法【例1-1】将十进制数97转换成二...

汇编语言期末总结
汇编语言基础知识程序 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 语言分哪三类?答:(1)机器语言(2)汇编语言(3)高级语言2、十进制数用D(Decimal)、二进制数用B(Binary)、八进制数用O(Octal)、十六进制数用H(Hexadecimal)来 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示。由于英文字母O容易和零误会,所以也可以用Q来表示八进制数。★任意进制数的通式:其中为整数部分,为小数部分,r为基数。每一项的数字可用0~r-1数字中的一个数字来表示。、3、进制转化:(1)十进制数与二进制数之间的转换:1)十进制整数转换成二进制整数:除2取余法【例1-1】将十进制数97转换成二进制数。其过程如下:最后结果为:(97)10=(A6A5A4A3A2A1A0)2=(1100001)2十进制小数转换成二进制小数:乘2取整法。【例1-2】将十进制小数0.6875转换成二进制小数。其过程如下:最后结果为:(0.6875)10=(0.A-1A-2A-3A-4)2=(0.1011)2带小数的转化:(97)10=(1100001)2(0.6875)10=(0.1011)2由此可得:(97.6875)10=(1100001.1011)2二进制数转换成十进制数:按位权展开后相加。【例1-3】将二进制数111.11转换成十进制数。其过程如下:(111.11)2=1×22+1×21+1×20+1×2-1+1×2-2=4+2+1+0.5+0.25=(7.75)10(2)十进制与八进制之间的转换:1)十进制整数转换成八进制整数:除8取余法。【例1-4】将十进制数97转换成八进制数。其过程如下:最后结果为:(97)10=(A2A1A0)8=(141)8十进制小数转换成八进制小数:乘8取整法。【例1-5】将十进制小数0.6875转换成八进制小数。其过程如下:0.6875×85.5000整数部分为5,即A-1=50.5000余下的小数部分×84.0000整数部分为4,即A-2=40.0000余下的小数部分为0,结束最后结果为:(0.6875)10=(0.A-1A-2)8=(0.54)83)八进制数转换成十进制数:按位权展开后相加【例1-6】将八进制数141.54转换成十进制数。其过程如下:(141.54)8=1×82+4×81+1×80+5×8-1+4×8-2=64+32+1+0.625+0.0625=97.6875最后结果为:(141.54)8=(97.6875)10(3)十进制与十六进制之间的转换1)十进制整数转换成十六进制整数:除16取余法。【例1-7】将十进制数97转换成十六进制数。其过程如下:最后结果为:(97)10=(A2A1A0)16=(61)162)十进制小数转换成十六进制小数:乘16取整法。【例1-8】将十进制小数0.6875转换成十六进制小数。其过程如下:十六进制数转换成十进制数:按权位权展开后相加。【例1-9】将十六进制数61.B转换成十进制数。其过程如下:(61.B)8=6×161+1×160+B×16-1=96+1+11×16-1=97+0.6875=97.6875最后结果为:(61.B)16=(97.6875)10表1-1 十、二、八、十六进制数码的对应关系(4)二进制与八进制、十六进制数之间的转换1)二进制数转换成八进制数:将每三位二进制数转换成对应的一位八进制数【例1-10】直接将二进制数11110.11转换成八进制数。其过程如下:011110.11036.6所以:(11110.11)2=(36.6)82)八进制数转换二进制数:将每一位八进制数分解成对应的三位二进制数3)二进制数转换成十六进制数:将每四位二进制数转换成对应的一位十六进制数【例1-12】直接将二进制11110.11转换成十六进制数。其过程如下:00011110.11001E.C所以:(11110.11)2=(1E.C)164)十六进制数转换二进制数:将每一位十六进制数转换成对应的四位二进制数【例1-13】直接将十六进制数EF.C转换成二进制数。其过程如下:EF.C11101111.1100所以:(EF.C)16=(11101111.11)2由以上方法可以看出,(25)10=(11001)2=(19)16=(31)8,(0.5)10=(0.1)2=(0.8)16=(0.4)8。二进制数的编码及运算:(1)原码:[-0]原=10000000,[-1]原=10000001,[-127]原=11111111。结论:二进制正、负数的原码就是符号化的机器数真值本身。0的原码+0、-0(2)反码:例如,n=8时,[+0]反=00000000,[+1]反=00000001,[+127]反=01111111。当X≤0时,[X]反=2n-1+X(MOD2n)。例如,n=8时,[-0]反=11111111,[-1]反=11111110,[-127]反=10000000。结论:二进制正数的反码就是其原码。二进制负数的反码就是机器数符号位保持不变,其余按位取反。若二进制数X=Xn-1Xn-2…X1X0,则反码表示法的定义为:0的反码:+0、-0(3)二进制数补码编码方法:例如,n=8时,[+0]补=00000000,[+1]补=00000001,[+127]补=01111111。当X≤0时,[X]补=2n-|X|(MOD2n)。例如,n=8时,[-0]补=00000000,[-1]补=11111111,[-127]补=10000001。结论:二进制正数的补码就是其原码。二进制负数的补码就是机器数符号位保持不变,其余位取反码后末位加1。注意:①在补码表示法中,0只有一种表示,即000…000。②对于10000000这个补码编码,其真值被定义为-128。补码的表示范围为:-128----+127【例1-14】机器字长n=8位,X=+48D,求[X]补。首先将+48D转换为二进制数:+110000B。因为机器字长是8位,其中符号占了1位,所以数值只占7位。将+110000B写成+0110000B,[+48]补=00110000B,写成十六进制数为30H,即[+48]补=30H。【例1-15】机器字长n=8位,X=-48D,求[X]补。首先将-48D转换为二进制数:-110000B。因为机器字长是8位,其中符号占了1位,所以数值只占7位。将-110000B写成-10110000B。再将数值位0110000B按位求反后为1001111B,末位加1后为1010000B。所以,[-48]补=11010000B,写成十六进制数为0D0H,即[-48]补=0D0H。例如:若[X]补=01111111,则X=(+1111111)2=(+127)10。若[X]补=11111111,则X=(-0000001)2=(-1)10。(4)二进制数补码的运算补码的运算 规则 编码规则下载淘宝规则下载天猫规则下载麻将竞赛规则pdf麻将竞赛规则pdf 是:[X+Y]补=[X]补+[Y]补[X-Y]补=[X]补+[-Y]补注:采用补码运算后,结果也是补码,欲得运算结果的真值,还需进行转换。5、在计算机中BCD码有两种格式:(1)非压缩BCD码:1字节(8位二进制)中仅表示一位BCD数,例如:(00000110)BCD=6。(2)压缩BCD码:1字节中仅表示两位BCD数,例如:(01100110)BCD=66。计算机显示、打印字符的编码一般采用什么码。【ASCⅡ码】原码、反码、补码的表示范围(机器字长8位)原码、反码:-127---+127补码:-128---+127习 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 :1.2把下列十进制数转换成二进制数、八进制数、十六进制数。①6.25②5.75③0.875④254微型计算机系统1、8086微处理器的功能结构两大部件:(1)总线接口单元BIU:BIU负责与存储器接口负责对全部引脚的操作(存储器和I/O设备)(2)执行单元EU:EU部分负责指令的执行。2、8086CPU内部结构如图所示:总线接口单元BIU由20位地址加法器、4个段寄存器、16位指针IP、指令队列缓冲器和总线控制逻辑 电路 模拟电路李宁答案12数字电路仿真实验电路与电子学第1章单片机复位电路图组合逻辑电路课后答案 等组成。执行单元EU:包含一个16位运算器ALU、8个16位的寄存器、1个16位标志寄存器、一个数据暂存寄存器和执行单元的控制电路。5、8086的通用寄存器(14个):数据寄存器:既可以作8位又可作16位AX:作为累加器使用,在乘除等指令中指定用来存放操作数。BX:通用寄存器使用,在计算存储地址时,常用作基址寄存器。CX:通用,此外常用来保存计数值。隐含计数器DX:通用,对于某些I/O操作,DX可用来存放I/O端口地址指针和变址寄存器:SP:称为堆栈指针寄存器,用来指示段顶的偏移地址BP:称为基址指针寄存器,可以与堆栈寄存器SS联用来确定堆栈中某一存储单元地址SI:源变址寄存器DI:目的变址寄存器一般与数据段寄存器DS联用,确定数据中某一单元的地址。(3)专用寄存器:IP(InetructionPointer)为指针寄存器,它用来存放代码中的偏移地址。FLAGS(FR)为标志寄存器,又称状态寄存器(ProgramStatusWord,PSW),这是一个存放条件码标志、控制标志和系统标志的寄存器,16位条件码标志(状态标志位):用来记录程序中运行结果的状态信息:由CPU自行设置(1)辅助进位标志AF:这个标志用于十进制算术运算指令中。(2)进位标志CF:这个标志主要用于多字节数的加、减法运算。(3)溢出标志OF:多用于算术运算中。(4)符号标志SF:它的值与运算结果的最高位相同。(5)奇偶标志PF:这个标志可用于检查在数据传ZHESHI送过程中是否发生错误。(6)零标志ZF:若运算的结果为0,则ZF=1,否则ZF=0。8、控制标志位:(1)方向标志DF:若用指令置DF=1,则引起串操作指令为自动减量指令,也就是从高地址到低地址处理字符串;若使DF=0,则串操作指令就为自动增量指令,也就是从低地址到高地址处理字符串。(2)中断允许标志IF:若指令中置IF=1,则允许CPU去接收外部的可屏蔽中断请求;若使IF=0,则屏蔽上述的中断请求,对内部产生的中断不起作用。(3)追踪标志TF:置TF标志,使处理进入单步方式,以便于调试。在这个方式中,CPU在每条指令执行以后,产生一个内部中断,允许程序在每条指令执行以后进行检查。8、段寄存器(4个):(1)代码段寄存器CS(2)数据段寄存器DS(3)堆栈段寄存器SS(4)附加段寄存器ES9、微机的总线按功能分:(1)地址总线AB(2)数据总线DB(3)控制总线CB10、地址(1)物理地址:是指CPU和存储器进行数据交换时实际所使用的20位地址物理地址包括2个部分:段基址(段起始地址高16位)和偏移地址逻辑地址:是程序使用段内16位的地址。逻辑地址分为段基址和偏移量物理地址计算:当CPU寻址某个存储单元时,先将段寄存器的内容左移4位,然后加上指令中提供的16位偏移地址而形成20位物理地址★物理地址=16*段基址(相当于段基址后+0)+偏移量(逻辑地址)习题22.3简述8086CPU的寄存器组织p252.4试述8086CPU标志寄存器各位的含义与作用p272.58086中,存储器为什么采用分段管理?(1)内辅16位地址外辅20位地址,方便管理(2)模块化体现指令系统和寻址方式指令格式:(1)操作码字段:用来说明该指令所要完成的操作。(2)地址码字段:用来描述该指令的操作对象。一般是直接给出操作数,或者给出操作数存放的寄存器编号,或者给出操作数存放的存储单元的地址或有关地址的信息。2、汇编语言指令中寻址方式(能正确识别每种寻址方式)p38重点掌握立即、寄存器、直接、寄存器间接、基址、变址、基址加变址、带位移基址变址(相对)寻址方式。(1)立即寻址:源操作数是立即数寻找的操作数紧跟在指令操作码之后。这种寻址方式在汇编语言格式中表示为:操作码数字表达式其中,这个数字表达式的值可以是一个8位整数,也可以是一个16位整数。【例3-1】MOVAX,267MOVAL,10010011BAND0FEHMOVAL,PORT1MOVAX,DATA1汇编立即寻址方式时,汇编程序首先计算出数字表达式的值,然后将其写入指令的地址码字段,这称为立即数(2)寄存器寻址:操作数放在寄存器中;汇编语言格式中表示为操作码寄存器名比如AL,BX,CX,DS、IP等等。【例3-4】MOVAX,BXMOVAL,BL其中,AX,BX是16位寄存器寻址方式;AL,BL是8位寄存器寻址方式。(3)直接寻址:是指寻找的操作数的地址在指令中直接给出。这种寻址方式在汇编格式中表示为操作码地址表达式(或[地址表达式])操作码[数字表达式]【例3-5】假设TABLE是在数据段定义的一个字节数组的首地址标号(变量名),其偏移地址为1000H,则指令MOVAL,TABLE或MOVAL,TABLE+2或MOVAL,[TABLE]或MOVAL,[TABLE+2]或MOVAL,[1000H]或MOVAL,[1000H+2]是等效的。其中TABLE、[TABLE]、[1000H]、TABLE+2、[TABLE+2]和[1000H+2]都是直接寻址方式。(4)寄存器间接寻址:操作数在存储器中,但操作数地址的偏移量在寄存器中在汇编格式中表示为:[基址寄存器名或变址寄存器名]【例3-8】MOVAX,[BX]MOVAX,[SI]其中,[BX]、[SI]都是寄存器间接寻址方式注:(1)在计算机中通常将BX,BP称为基址寄存器(2)SI,DI称为变址寄存器,寻址时操作数的地址放在寄存器中。(5)基址寻址:由指定的基址寄存器内容,加上指令中给定的位移量作为操作数的有效地址。EA=[基址寄存器+位移量]【例3-13】MOVAX,[BX][SI]或写为MOVAX,[BX+SI]其中,[BX][SI]、[BX+SI]都是基址变址寻址方式。(6)变址寻址:由变址SI、DI寄存器内容,加上指令中给定的位移量作为操作数的有效地址。EA=[变址寄存器+位移量](7)基址加变址寻址:由指令中的基址寄存器内容和变址寄存器内容相加得到操作数的有效地址。EA=[基址寄存器+变址寄存器](8)带位移的基址加变址寻址:操作数在内存中,由变址寄存器、基址寄存器和位移量相加得到内存有效地址。EA=基址寄存器+变址寄存器+位移量3、数据传送指令:(1)通用传送指令:1)最基本的传送指令MOV:可实现寄存器之间、寄存器和存储器之间传送数据,还可实现将立即数送至寄存器或存储单元的操作。★汇编格式:MOV目的操作数,源操作数★执行的操作:(目的操作数)←源操作数★功能:将源操作数存入目的操作数的寄存器或存储单元中去。注意★:①目的操作数不能是立即寻址方式。②源操作数与目的操作数不能同时为存储器寻址方式,即两个内存单元之间不能直接传送数据。③立即数不能直接送段寄存器,即段寄存器只能通过寄存器或存储单元传送数据。④两个段寄存器之间不允许直接传送数据。⑤不允许给CS、IP、PSW三个寄存器传送数据,即这3个寄存器的值用户无权改变。⑥源操作数和目的操作数必须字长相等。⑦MOV指令不影响标志位。MOV指令有九种形式:①从寄存器到寄存器;②从寄存器到段寄存器;③从寄存器到存储器;④从段寄存器到寄存器;⑤从存储器到寄存器;⑥从段寄存器到存储器;⑦从存储器到段寄存器;⑧从立即数到寄存器;⑨从立即数到存储器。图3.7MOV指令的九种形式说明:寄存器寻址有直接、寄存器间接、寄存器相对、基址变址和相对基址变址五种存储器寻址方式。2)进栈指令PUSH及出栈指令POP:●PUSH指令汇编格式:PUSH源操作数执行的操作:(SP)←(SP)-2先修改指针((SP)+1,(SP))←操作数功能:将16位寄存器、段寄存器、16位存储单元数据压入堆栈。●POP指令汇编格式:POP目的操作数执行操作:(操作数)←((SP)+1,(SP))(SP)←(SP)+2后修改指针功能:将堆栈中的16位数据送入16位寄存器、段寄存器、16位存储单元中。说明:①在8086/8088中,PUSH、POP指令的操作数不能使用立即寻址方式。POP指令的操作数还不能使用CS寄存器。②堆栈中数据的压入、弹出必须以字为单位,所以PUSH和POP指令只能作字操作。③这两条堆栈指令不影响标志位。【例3-18】MOVAX,1234HPUSHAX设执行前(SS)=2000H,(SP)=00FEH,执行后(SS)=2000H,(SP)=00FCH。3)PUSHF指令:汇编格式:PUSHF执行的操作:(SP)←(SP)-2((SP)+1,(SP))←PSW功能:将标志寄存器内容压入堆栈。4)POPF指令汇编格式:POPF执行的操作:(PSW)←((SP)+1,(SP))(SP)←(SP)+2功能:将16位堆栈数据弹出送入标志寄存器中。5)XCHG指令:互换指令XCHG可以实现字互换或字节互换。互换可以在寄存器之间进行,也可以在寄存器和存储单元之间进行。汇编格式:XCHG目的操作数,源操作数执行的操作:互换源、目的两个操作数的存放位置。(2)累加器专用传送指令:这类指令都仅限于I/O端口或存储单元与累加器AL(AX)之间传送数据。具体包括IN输入指令、OUT输出指令和XLAT换码指令。1)IN输入指令汇编格式:INAL,I/O口地址表达式或INAX,I/O口地址表达式执行的操作:AL←(I/O口地址表达式)或AX←(I/O口地址表达式+1),(I/O口地址表达式)说明:①该指令的目的操作数仅限于累加器,即8位操作采用AL,16位操作采用AX,不能由其他任何寄存器代替。②如果I/O寻址的口地址号在8位以内,可以用直接寻址方式,地址表达式则由一个8位立即数表示;如果I/O寻址的口地址号在16位以内,可以用寄存器间接寻址方式,所寻址的地址口号则装入DX,间接寻址仅可以使用DX。2)OUT输出指令汇编格式:OUT地址表达式,AL或OUT地址表达式,AX执行的操作:I/O口地址←(AL)或(I/O口地址+1),(I/O口地址)←(AX)说明:同1)。3)XLAT换码指令汇编格式:XLAT或XLAT地址标号执行的操作:(AL)←((BX)+(AL))说明:①XLAT指令是将AL的内容替换成存储单元中的一个数,往往用于代码转换,例如,把字符的扫描码转换成ASCII码或者把十六进制数0~F转换成七段数码管显示代码。使用此指令前,先在数据段建立一个表格,表格首地址存入BX寄存器,欲取代码的表内位移量存入AL寄存器中。XLAT指令将(AL)值扩展成16位,与(BX)相加形成一个段偏移地址,段地址取(DS),据此读出代码送入AL寄存器。②该指令有两种格式,第二种格式中的地址标号是指代码表的表首地址。它只是为提高程序可读性而设置的,指令执行时只使用预先存入BX中的代码表首地址,而并不用汇编格式中指定的地址标号。③(AL)是一个8位无符号数,所以表格中最多只能存放256个代码。④此指令的执行结果不影响标志位。【例3-21】一个七段LED显示代码转换表存于TABLE开始的存储区,则MOVAL,4MOVBX,OFFSETTABLEXLAT完成了将四个BCD码转换成七段LED显示代码的工作。地址传送指令:这组指令都是将地址送到指定的寄存器中1)LEA偏移地址送寄存器指令汇编格式:LEAREG(16位寄存器名),SRC(存储器寻址方式)执行的操作:(16位寄存器)←源操作数的偏移地址功能:把源操作数的偏移地址送到指定的寄存器2)LDS指针送指定寄存器和DS寄存器指令汇编格式:LDSREG,SRC执行的操作:(REG)<——(SRC)(DS)<——(SRC+2)功能:将源操作数寻址到的存储单元的第一个源操作数(字)送16位寄存器,第二个源操作数(字)送DS寄存器3)LES指针送指定寄存器和ES寄存器指令汇编格式:LES16位寄存器名,存储器寻址方式执行的操作:(REG)<——(SRC)(ES)<——(SRC+2)功能:将寻址到的存储单元的第一个源操作数(字)送16位寄存器,第二个源操作数(字)送ES寄存器。使用以上3条指令时,应注意以下几点:①源操作数为存储器寻址方式②目的操作室为16位寄存器,但不包括段寄存器。③这条指令不影响标志位。(4)标志传送指令:这组指令包括LAHF标志送AH和SAHFAH送标志寄存器。1)LAHF标志送AH指令汇编格式:LAHF执行的操作:(AH)←(PSW的低8位)说明:此指令具体操作如图3.9所示。2)SAHFAH送标志寄存器指令汇编格式:SAHF执行的操作:(PSW的低8位)←(AH)表3-4标志传送指令操作码LAHFSAHF指令功能AH<—(FR的低8位)FR的低8位<—(AH)算数运算指令:包括二进制数的运算及十进制数的运算指令表3-5算数运算指令操作码指令功能操作码指令功能ADD,ADC,INC加法指令DIV,IDIV除法指令SUB,SBB,DEG,NEG,CMP减法指令CBW,CWD符号位扩展MUL,IMUL乘法指令DAA,DAS,AAA,AAS,AAM,AAD十进制调整(1)加法指令:1)ADD加法指令:汇编格式:ADDDST,SRC执行的操作:(DST)←(SRC)+(DST)功能:完成源操作数和目的操作数的加法运算,将结果保存在目的操作数中2)ADC带进位加法指令:汇编格式:ADC目的操作数,源操作数执行的操作:(目的操作数)←源操作数+目的操作数+CF功能:完成带进位的源操作数和目的操作数加法运算,将加过保存到目的操作数中3)INC增量指令:汇编格式:INC操作数执行的操作:(操作数)←操作数+1功能:完成目的操作数的自家1运算减法指令:减法指令包括五条指令,如表3-4所示。表3-4减法指令操作码SUBSBBDECNEGCMP操作功能减法带借位减法减1求补比较1)SUB减法指令:汇编格式:SUB目的操作数,源操作数执行的操作:(目的操作数)←目的操作数-源操作数功能:完成源操作数和目的操作数的减法运算,结果保存到目的操作数中2)SBB带借位减法指令:汇编格式:SBB目的操作数,源操作数执行的操作:(目的操作数)←目的操作数-源操作数-CF功能:完成带借位的源操作数与目的操作数的减法运算,结果保存在目的操作数3)DEC减量指令:汇编格式:DEC操作数执行的操作:(操作数)←操作数-1功能:完成操作数的自减1运算4)NEG求补指令:汇编格式:NEG操作数执行的操作:(操作数)←0-操作数说明:①0-操作数=-操作数,在微型计算机中,带符号的二进制数值数据都采用补码编码,因此,此处的操作数是补码,所以求负的操作数实质上是求补操作。②只有当操作数为0时求补运算的结果使CF=0,其他情况则均为1;只有当操作数为-128或-32768时使OF=1,其他情况则均为0。5)★CMP比较指令:汇编格式:CMP目的操作数,源操作数执行的操作:目的操作数-源操作数。功能:完成目的操作数的源操作数的减法运算,不保留结果。注意:①以上5条指令都可做字或字节运算②除DEC指令不影响CF标志位外,其他标志位都受指令操作结果的影响【例3-25】完成双字长相减操作,被减数存放在DX与AX中,减数存放在BX与CX中,差放在DX和AX中。程序段如下:SUBAX,CXSBBDX,BX(3)乘法指令:乘法指令可对字节、字进行操作,且可对有符号数整数或无符号数整数进行操作。两个8位数相乘,结果为16位数;两个16位数相乘,结果为32位数。乘法指令有两条。1)MUL无符号数乘法指令:汇编格式:MUL源操作数执行的操作:若为字节操作(AX)←(AL)×源操作数若为字操作(DX),(AX)←(AX)×源操作数2)IMUL有符号数乘法指令:汇编格式:IMUL源操作数执行的操作:与MUL相同,只是处理的数据是有符号数,而MUL处理的数据是无符号数。说明:①在乘法指令中,被乘数(即目的操作数)隐含在AX(字运算)或AL(字节运算)中,乘数(即源操作数)由指令寻址,其寻址方式可以是除立即寻址方式之外的任何数据寻址方式,它同时也决定了乘法是字运算还是字节运算。两个8位数相乘其积是16位,存放在AX中;两个16位数相乘其积是32位,存放在DX、AX中,DX存放高位字,AX存放低位字。②乘法指令对除CF和OF以外的标志位无定义(即这些标志位的状态是不定的)。对于MUL指令,如果乘积的高一半为0,则CF和OF均为0;否则CF和OF均为1。对IMUL指令,如果乘积的高一半是低一半的符号扩展,则CF和OF均为0;否则均为1。测试这两个标志位,可知道乘积的高位字节或高位字是否是有效数字。【例3-26】MULCLIMULDLMULBYTEPTR[BX]IMULNUMR;NUMR是变量名(4)除法指令:与乘法指令一样,除法指令也可对字节、字数据进行操作,而且这些数可以是有符号数整数或无符号数整数。除法指令要求被除数的长度必须是除数的两倍,也就是说,字节除法是用16位数除以8位数;字除法是用32位数除以16位数。除法指令也有两条。1)DIV无符号数除法指令汇编格式:DIV源操作数执行的操作:若为字节操作:(AL)←(AX)/源操作数的商(AH)←(AX)/源操作数的余数若为字操作:(AX)←(DX、AX)/源操作数的商(DX)←(DX、AX)/源操作数的余数商和余数均为无符号数。2)IDIV有符号数除法指令汇编格式:IDIV源操作数执行的操作:与DIV相同,只是操作数是有符号数,商和余数均为有符号数,余数符号同被除数符号。说明:①在除法中,被除数(即目的操作数)隐含在AX(字节运算)或DX,AX(字运算)中,除数(即源操作数)由指令寻址,其寻址方式可以是除立即寻址方式之外的任何数据寻址方式,寻址方式同时也决定了除法是字节运算还是字运算。16位数除以8位数,商是8位,存放在AL中,余数是8位,存放在AH中;32位数除以16位数,商是16位,存放在AX中,余数是16位,存放在DX中。②一条除法指令可能导致两类错误:一类是除数为零;另一类是除法溢出。当被除数的绝对值大于除数的绝对值时,商就会产生溢出。如,(AX)=2000被2除,由于8位除法的商将存于AL中,而结果1000无法存入AL中,导致除法溢出。当产生这两类除法错误时,微处理器就会产生除法错中断警告。③除法指令对所有标志位无定义。【例3-27】DIVCL;AX的内容除以CL的内容,无符号商存于AL,余数存于AHIDIVDL;AX的内容除以DL的内容,带符号商存于AL,余数存于AHDIVBYTEPTR[BP];AX的内容除以堆栈段中由BP寻址的字节存储单元的内容,无符号的商存于AL中,余数存于AH中IDIVWORDPTR[AX];DX,AX的内容除以数据段中由AX寻址的字存储单元的内容,带符号的商存于AX中,余数存于DX中逻辑运算和移位指令:(1)逻辑运算指令:逻辑运算指令可对8位数或16位数进行逻辑运算。是按位操作的1)AND逻辑与指令汇编格式:AND目的操作数,源操作数执行的操作:(寻址到的目的地址)←目的操作数∧源操作数说明:①符号“∧”表示逻辑与操作。②本条指令通常用于使某个操作数中的若干位维持不变,而使另外若干位为0的操作,也称屏蔽某些位。要维持不变的位必须和“1”相“与”,而要置为0的位必须和“0”相“与”。【例3-29】屏蔽(AL)中的高4位。ANDAL,00001111B【例3-30】ANDAL,AL此指令执行前后,(AL)无变化,但执行后使标志位发生了变化,即CF=0,OF=0。2)OR逻辑或指令汇编格式:OR目的操作数,源操作数执行的操作:(寻址到的目的地址)←目的操作数∨源操作数说明:①符号“∨”表示逻辑或操作。②本条指令通常用于使某个操作数中的若干位维持不变,而使另外若干位置1的场合。要维持不变的位必须和“0”相“或”,而要置为1的位必须和“1”相“或”。【例3-31】ORAL,10000000B若执行前(AL)=0FH,则执行后(AL)=8FH。【例3-32】ORAL,AL指令执行前后,(AL)不变,但执行后标志位发生了变化,即CF=0,OF=0。3)XOR逻辑异或指令汇编格式:XOR目的操作数,源操作数执行的操作:(寻址到的目的地址)←目的操作数∨源操作数说明:①符号∨表示异或操作。②本条指令通常用于使某个操作数清为零,同时使CF=0;或常用于判断两个数是否相等;也可用于使操作数中的若干位维持不变,而使另外若干位取反的操作。维持不变的这些位与“0”相“异或”,而要取反的那些位与“1”相“异或”。【例3-33】XORAL,AL指令执行后,(AL)=0,CF=0,OF=0。【例3-34】测试(AL)是否等于33H。XORAL,33HJZMATCH这种方法常用于检测数值是否匹配。4)TEST测试指令:汇编格式:TEST目的操作数,源操作数执行的操作:目的操作数∧源操作数说明:①本条指令中两操作数相与的结果不保存。②本条指令通常用于在不改变原有操作数的情况下,用来检测某一位或某几位的条件是否满足,用于条件转移指令的先行指令。不检测的那些位与“0”相“与”,即将不检测的位屏蔽掉;检测的那些位与“1”相“与”,保持不变。【例3-36】检测(AL)的最高位是否为1,若为1则转移,否则顺序执行。TESTAL,10000000BJNZAA…AA:…5)NOT逻辑非指令汇编格式:NOT目的操作数执行的操作:(寻址到的地址)←(操作数)说明:①寻址方式不允许为立即寻址方式及段寄存器。②本条指令不影响标志位。6)逻辑运算指令对标志位的影响:由于逻辑运算操作是按位进行的,所以对标志位的影响不同于算术运算操作,对标志位的具体影响见表3-6表3-6逻辑运算指令对标志位的影响指令OFCFSFPFZFAFAND=0=00或10或10或1无定义OR=0=00或10或10或1无定义XOR=0=00或10或10或1无定义TEST=0=00或10或10或1无定义NOT不影响不影响不影响不影响不影响不影响注意:AND和TEST的区别:(1)AND:在执行时调用例如:ANDAX,7(2)TEST:在编译时调用移位指令:这组指令可以对8位或16位操作数进行操作,按移位方式分为三种。表3-10移位指令操作码指令功能操作码指令功能SHL将操作数逻辑左移指定次数ROL将操作不带进位循环左移指定次数SHR将操作数逻辑右移指定次数ROR将操作不带进位循环右移指定次数SAL将操作数算数左移指定次数RCL将操作带进位循环左移指定次数SAR将操作数算数右移指定次数RCR将操作带进位循环右移指定次数6、控制转移指令:无条件转移和条件转移指令JMP;JMP直接段内子程序调用和返回指令CALL;CALL间接段间循环控制指令loop;(1)无条件转移指令JMP:JMP指令的功能就是无条件地转移到指令指定的地址去执行从该地址开始的指令序列。它在实际使用中有以下四种格式。1)段内直接转移段内直接短转移。汇编格式:JMPSHORT转移地址标号机器指令的格式:如图3.11所示。执行的操作:(IP)←(当前IP)+8位位移量转移的范围:转到本条指令的下一条指令的-128~+127个字节的范围内。功能:无条件转移到指定的地址标号处开始往下执行指令。图3.11段内直接短转移指令格式段内直接近转移。汇编格式1:JMPNEARPTR转移地址标号汇编格式2:JMP数值偏移地址机器指令格式:如图3.13所示。执行的操作:(IP)←(IP)+16位位移量功能:无条件转移到指令指定的地址标号处并往下执行。可转移到当前代码段中的任何地方。注意:近转移与短转移相似,也是相对转移,可重定位,只是转的距离更远些。图3.13段内直接近转移指令格式【例3-43】设CS=1000H,执行表3-9所示的程序,机器执行到JMP指令后,算得转移地址偏移地址=当前(IP)+位移量=0005H+0FFBH=1000H转移地址取段地址=当前(CS)=1000H则转移到1000H:1000H处,即本段的1000H处。表3-9例3-43的程序2)段内间接转移汇编格式1:JMP16位寄存器名。机器指令格式:如图3.15所示。执行的操作:(IP)←16位寄存器的内容。功能:无条件转移到当前段的指定偏移地址处。图3.15段内间接转移指令格式【例3-45】如果TABLE是数据段中定义的一变量名,偏移地址为0010H,(DS)=1000H,(10015H)=12H,(10016H)=34H,有指令JMPWORDPTRTABLE[BX](或JMPTABLE[BX])执行时若(BX)=0005H,则执行后,(IP)=3412H,即程序转移到本段3412H处。3)段间直接转移●汇编格式1:JMPFARPTR转移地址标号执行的操作:(IP)←转移地址标号的偏移地址(CS)←转移地址标号的段地址功能:无条件转移到指定标号地址处并往下执行。●汇编格式2:JMP段地址值:偏移地址执行的操作:(IP)←偏移地址值(CS)←段地址值功能:无条件转移到指定段的指定偏移地址处并往下执行。机器指令格式:如图3.16所示。图3.16段间直接转移指令格式4)段间间接转移汇编格式:JMPDWORDPTR存储器寻址方式执行的操作:(IP)←寻址到的存储单元的第一个字(CS)←寻址到的存储单元的第二个字功能:无条件转移到指定段的指定偏移地址处。【例3-47】如果TABLE是数据段中定义的一变量,偏移地址为0010H,(DS)=1000H,(10015H)=12H,(10016H)=34H,(10017H)=56H,(10018H)=78H,有指令JMPDWORDPTRTABLE[BX]或JMPDWORDPTR[TABLE+BX]执行时若(BX)=0005H,则执行后,(IP)=3412H,(CS)=7856H,即程序转移到7856H:3412H处。另外要说明的是,所有JMP指令都不影响状态标志位。(2)条件转移指令:条件转移指令比较多,总结起来,有如下特点:(1)所有条件转移指令的寻址方式都是段内直接短寻址,8位位移量,因此都是相对转移,可重定位。(2)所有条件转移指令的共同特点为汇编格式:指令名转移地址标号执行的操作:先测试条件,若条件成立,则(IP)←(IP)+8位位移量;若条件不成立,则(IP)保持不变。功能:满足测试条件就转移到当前段的指定地址标号处并往下执行,否则顺序往下执行。转移范围:转移到相距本条指令的下一条指令的-128~+127个字节的范围之内。(3)所有条件转移指令不影响标志位。(4)转移指令中,有一部分指令是比较两个数的大小,然后根据比较结果决定是否转移。(5)转移指令中,大部分指令可以用两种不同的助记符来表示。下面我们分四组来讨论条件转移指令。(1)根据某一个标志位的值来决定是否有转移的指令,测试的标志位有S、Z、C、P和O等5个,每个标志位有两个可能取值“0”和“1”表3-10简单条件转移指令表汇编语言指令名测试条件操作JZ或(JE)ZF=1结果为0(或相等)则转移JNZ或(JNE)ZF=0结果不为0(或不相等)则转移JSSF=1结果为负则转移JNSSF=0结果为正则转移JOOF=1结果溢出则转移JNOOF=0结果无溢出则转移JP或(JPE)PF=1奇偶位位1则转移JNP或(JPO)PF=0奇偶位位0则转移JC或(JANE或JB)CF=1有进位则转移JNC或(JAE或JNB)CF=0无进位则转移(2)比较两个无符号数的大小,并根据比较结果转移的指令见表3-11。两个无符号数据比较大小时,机器根据CF标志位来判断大小。表3-11无符号数比较条件转移指令表汇编语言指令名测试条件操作JB(或JNAE或JC)CF=1低于,或不高于或等于,或进位位为1则转移JNB(或JAE或JNC)CF=0不低于,或高于或等于,或进位位为0则转移JA(或JNBE)CF∨ZF=0高于,或不低于或等于则转移JNA(或JBE)CF∨ZF=1不高于,或低于或等于则转移表3-12有符号数比较条件转移指令汇编语言指令名测试条件操作JL(或JNGE)SF∨OF=1小于,或不大于或等于则转移JNL(或JGE)SF∨OF=0不小于,或大于或等于则转移JG(或JNLE)(SF∨OF)∨ZF=0大于,或不小于或等于则转移JNG(或JLE)(SF∨OF)∨ZF=1不大于,或小于或等于则转移子程序调用和返回指令1)CALL调用指令(1)段内直接调用。汇编格式:CALLNEARPTR子程序名(或CALL子程序名)机器指令格式:同段内直接近转移一样,是一条三字节指令,一个字节的操作码之后紧存着两个字节的16位的位移量。执行的操作:(SP)←(SP)-2((SP)+1,(SP))←(IP)(IP)←(IP)+16位位移量(2)段间直接调用。汇编格式:CALLFARPTR子程序名机器指令格式:同段间直接转移一样,是一条5字节指令,1个字节的操作码之后紧存着子程序入口地址的偏移地址及段地址。执行的操作:(SP)←(SP)-2((SP)+1,(SP))←(CS)(SP)←(SP)-2((SP)+1,(SP))←(IP)(IP)←子程序入口地址的偏移地址(指令的第2、3字节)(CS)←子程序入口地址的段地址(指令的第4、5字节)(3)段内间接调用。汇编格式1:CALL16位寄存器名汇编格式2:CALLWORDPTR存储器寻址方式机器指令格式:同段内间接转移一样,操作码之后紧跟着操作数的寻址方式。执行的操作:(SP)←(SP)-2((SP)+1,(SP))←(IP)(IP)←16位寄存器内容或寻址到的存储单元的一个字(4)段间间接调用。汇编格式:CALLDWORDPTR存储器寻址方式机器指令格式:同段间间接转移一样,操作码之后紧跟着操作数的寻址方式。执行的操作:(SP)←(SP)-2((SP)+1,(SP))←(CS)(SP)←(SP)-2((SP)+1,(SP))←(IP)(IP)←寻址到的存储单元的第一个字(CS)←寻址到的存储单元的第二个字RET返回指令:返回指令段内返回段间返回段内带立即数返回段间带立即数返回汇编格式RETRETRET表达式RET表达式执行操作(IP)←((SP)+1,(SP)) (SP)←(SP)+2(IP)←((SP)+1,(SP))(SP)←(SP)+2(CS)←((SP)+1,(SP))(SP)←(SP)+2(IP)←((SP)+1,(SP))(SP)←(SP)+2(SP)←(SP)+16位表达式(IP)←((SP)+1,(SP))(SP)←(SP)+2(CS)←((SP)+1,(SP))(SP)←(SP)+2(SP)←(SP)+16位表达式注:CALL和RET执行的操作怡好相反。CALL指令和RET指令都不影响标志位3)循环控制指令:循环控制指令共有三条:LOOP、LOOPZ/LOOPE和LOOPNZ/LOOPNE。汇编格式:指令名循环入口的地址标号执行的操作:(1)(CX)←(CX)-1。(2)判断测试条件,若条件成立,则(IP)←(IP)+8位位移量;若条件不成立,则(IP)保持不变。7、ANDAX,7和TEXT的区别:(1)ANDAX,7在执行时调用(2)TEXT编译时调用习题:1、AND、OR、XOR、NOT指令主要作用是什么?哪些是对指定位清0、置1、取反?【P79】(1)AND主要用于:将指定位清0,其余位不变。要清0的位与0相与,不变的位与1相与。(2)OR主要用于:将指定位置1,其余位不变。要置1的位与1相或 ,不变的位与0相或(3)XOR主要用于:A.将指定位取反,其余位不变。要取反的位与1相异或,不变的位与0相异或。B.异或指令还有对寄存器清0的作用,自已与自已相异或,可达到清0目的。总结:给某一个寄存器清0的方法,共有4种:(以AX为例) (1)MOVAX,0(2)SUBAX,AX(3)ANDAX,0(4)XORAX,AX2、ADD和ADC,SUB和SBB指令的区别及用法。【P51】【ADD:加法指令SUB:减法指令ADC:带进位的加法指令SBB:带进位的减法指令】3、指令TEST的用法及作用举例。(59页)TEST:逻辑测试指令格式:TESTOPRD1,OPRD2功能:完成两个操作数按位进行逻辑与运算,结果反映在标志位上,不保留结果。4、MOVAX,[BX][DI]是将源操作数所指内存字单元里的值送到AX中,LEAAX,[BX][DI]是将源操作数指出的地址送到AX中。汇编语言语法及其程序格式汇编语言语句种类:指令语句:伪指令语句汇编语言语句格式:[名字项]操作码项操作数项[;注释][NAME]operationoperand[;comment]名字的标号有三种属性:段属性:定义标号的段起始地址偏移属性:偏移地址类型属性:是在本段内引用还是在其他段内引用表达式:分为数值表达式和地址表达式分析运算符:SEG:返回变量或标号所在段基值OFFSET:返回变量或标号的段内偏移量TYPE运算符:返回变量或标号的类型属性值。等值伪指令EQU:(1)格式:<符号名>EQU<表达式>例:AXEQU88、地址计数器$读懂例4-10p979、OR\G伪操作汇编语言程序设计顺序程序设计:累加求和:2、【例5-1】将两个字节数据相加,并存放到一个结果单元中DATASEGMENTAD1DB4CH:定义第一个加数AD2DB25H:定义第二个加数SUMDB?:定义结果单元DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTARTMOVAX,DATAMOVDS,AXMOVAL,AD1:取第一个加数ADDAL,AD2:取第二个加数相加MOVSUM,AL:存放结果MOVAH,4CHINT21H:返回docCODEENDSENDSTART3、多字节加法:1)方法12)方法2:将两个4字节长的二进制数相加,运算结果存放在相应结果单元中。DATASSEGMENT   DATA1DD12345678H   DATA2DD0ABCDEF01H   DATA3DW2DUP(0);此处输入数据段代码  DATASENDSSTACKSSEGMENT   ;此处输入堆栈段代码STACKSENDSCODESSEGMENT   ASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:   MOVAX,DATAS   MOVDS,AX   MOVBP,0   LEASI,DATA1                ;取两个数据的首地址   LEADI,DATA2   MOVAX,[SI]   ADDAX,[DI]                ;后四位相加MOV[DATA3],AX              ;前四位存入DATA3    MOVAH,4CH   JCL                    ;判断是否进位   MOV4[DATA3],AX              ;后四位存入DATA3   MOVAX,0K:  MOVAX,4[SI]               ;前四位相加   ADDAX,4[DI]   JMPJL:  MOVAX,1                ;有进位AX先加一   JMPKJ:  INT21HCODESENDS   ENDSTART4、分支程序设计:简单双分支程序设计:【例5-6】已知在内存中有一个字节单元NUM,存有带符号的数据,要求计算出它的绝对值后,放入RESULT单元中DATASEGMENTXDB-25RESULTDB?DATAENDSCODESEGMENTASSUMEDS:DATA,CS:CODESTART:MOVAX,DATAMOVDS,AX;初始化MOVAL,X;X取到AL中TESTAL,80H;测试AL的正负JZNEXT;为正,转到NEXTNEGAL;否则,AL求补NEXT:MOVRESULT,AL;送结果MOVAH,4CHINT21H;返回docCODEENDSENDSTART;汇编结束多分支程序设计p117例5-7编写下面函数值的程序1X>0Y=0X=0-1X<0设输入数据为X,输出数据为Y,且皆为字节变量程序如下:DATASEGMENTXDB-25YDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX:初始化MOVAL,X:X取到AL中CMPAL,0:AL中内容和0比较JGEBIG:大于等于0转BIGMOVBL,-1:否则为负数,-1送BLJMPEXIT:转到结束位置BIG:JEEE:AL内容是否为0,为0转EEMOVBL,1:否则为大于0,1送BLJMPEXIT:转到结束位置EE:MOVBL,0:0送BLEXIT:MOVY,BL:BL内容送到Y单元MOVAH,4CHINT21H:程序结束CODEENDSENDSTART:汇编结束5、循环程序设计方法:[例5-12]试编制一个程序把BX寄存器内的二进制数用十六进制数的形式在屏幕上显示出来二进制到十六进制转换程序:CODESEGMENTMAINPROCFARASSUMECS:CODESTART:PUSHDSSUBAX,AXPUSHAXMOVCH,4LP:MOVCL,4POLBX,CLMOVAL,BLANDAL,0FHADDAL,30HCMPAL,3AHJLPRINTAADDAL,07HPRINTA:MOVDL,ALMOVAH,2INT21HDECCHJNZLPRETMAINENDPCODEENDSENDSTART程序流程图:子程序机构子程序参数传递方法:寄存器、内存、堆栈子程序传递参数的方式:通过寄存器传递【例6-3】十进制到十六进制转换程序,程序要求从键盘取得一个十进制数,然后把该数的十六进制形式在屏幕上显示出来程序如下:DECIHEXSEGMENTASSUMECS:DECIHEXPUSHDSSUBAX,AXPUSHAXMAINPROCFARREPEAT:CALLDECIBIN:调用键入子程序CALLCRLF:调用回车换行子程序CALLBINIHEX:调用转换子程序CALLCRLF:调用回车换行子程序JMPREPEAT:继续,键入CTRL+BREAK返回DOCRETMAINENDPDECIBINPROCNEARMOVBX,0NEWCHAR:MOVAH,1:接受键入INT21H:调用DOCSUBAL,30H:ASCII字符转换为二进制数JLEXIT:数<0,退出CMPAL,9:数>9JGEXIT:是,退出CBW:否,调整成16位XCHGAX,BXMOVCX,10MULCX:乘10XCHGAX,BXADDBX,AXJMPNEWCHAR:取下一个字符EXIT:RETDECIBINENDP3/求最大值/最小值求最小值:求最大值NAME    SEARCH_MAXSTACK   SEGMENT  PARA STACK 'STACK'        DB  1024  DUP(?)STACK   ENDSDATA    SEGMENTBUFFER  DB 1, 2, 4, 5, 3, 8COUNT   EQU $-BUFFERMAX     DB  ?DATA    ENDSCODE    SEGMENTSTART   PROC  FAR        ASSUME  CS:CODE, DS:DATA, SS:STACKBEGIN:  PUSH  DS        XOR   AX, AX        PUSH  AX        MOV   DS, AX        LEA   BX, [BUFFER]        MOV   AL, [BX]        INC   BX        MOV   CX, COUNT        DEC   CX         ;这里为什么要把CX减1?         AGAIN:  CMP   AL, [BX]                JGE   NEXT        MOV   AL, [BX]NEXT:   INC   BX        LOOP  AGAIN        MOV   MAX, AL      
本文档为【汇编语言期末总结】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
心想事成2022
暂无简介~
格式:doc
大小:1MB
软件:Word
页数:40
分类:成人教育
上传时间:2022-03-25
浏览量:0