微机原理及应用实验 |
您所在的位置:网站首页 › 将学生成绩从大到小排序的程序 › 微机原理及应用实验 |
数据比较及排序程序
比较指令CMP格式操作用途案例
转移指令无条件转移指令无条件段内转移段内直接转移格式案例
段内间接转移格式案例
无条件段间转移段间直接转移格式
段间间接转移格式
案例
有条件转移指令条件转移指令的应用JC/JNCJZ/JNZJO/JNOJP/JPEJA/JAE/JB/JBE其他条件转移指令
案例
数据比较程序详解当条件转移指令的条件不成立时MOV AX, 2C16HMOV BX, 0F180HCMP AX, BXJAE ABOVEXCHG AX,BXABOVE:HLT
当条件转移指令的条件成立时MOV AX, FF66HMOV BX, 2020HCMP AX, BXJAE ABOVEXCHG AX,BXABOVE:HLT
排序程序10个双字节(字)无符号数从小到大排序程序10个双字节(字)有符号数从小到大排序程序
比较指令CMP
格式
CMP OPRD1,OPRD2
操作
OPRD1- OPRD2
指令执行的结果不影响目标操作数,仅影响6个标志位! 用途用于比较两个数的大小,可作为条件转移指令转移的条件 案例在内存数据段从DATA开始的单元中存放了两个8位无符号数,试比较他们的大小,并将大的输送MAX单元。
转移指令是通过修改指令的偏移地址或段地址及偏移地址实现程序的转移的一类指令。 转移指令又分为无条件转移指令和有条件转移指令: 无条件转移指令: 无条件转移到目标地址,执行新的指令条件转移指令: 在具备一定条件的情况下转移到目标地址 无条件转移指令寻找目标地址的方法有两种: 直接的方式;间接的方式 无条件段内转移转移的目标地址在当前代码段内,段地址不改变。即目标地址是16位偏移地址。 转移的目标地址由指令直接给出 格式JMP Label 段内转移时的标号前可加运算符NEAR,也可不加,省略时为段内转移。
转移的目标地址存放在某个16位寄存器或存储器的某两个单元中 格式JMP OPRD
转移的目标地址不在当前代码段内,目标地址为32位,包括段地址和偏移地址 转移的目标地址由指令直接给出 格式JMP FAR LABEL 转移的目标地址由指令中的32位存储器操作数给出 格式JMP OPRD
在满足一定条件下,程序转移到目标地址继续执行。 在条件转移指令之前,应有一条为条件转移指令的执行形成条件的指令(如对标志位产生影响的指令) 条件转移指令均为段内短转移,即转移范围为: -128------+127字节即条件满足则转移,否则顺序执行 条件转移指令的应用 JC/JNC判断CF的状态。常用于比大小。 JZ/JNZ判断ZF的状态。常用于循环体的结束判断。 JO/JNO判断OF的状态。常用于有符号数溢出的判断。 JP/JPE判断PF的状态。用于判断运算结果低8位中1的个数是否为偶数。 JA/JAE/JB/JBE判断CF或CF+ZF的状态。常用于无符号数的大小比较。 其他条件转移指令
启动TD(Turbo Debugger)输入程序段,观察执行情况、标志位变化并分析 结果。 关于TD的使用,请参考下面这篇文章: 微机原理及应用实验——汇编环境MASM的使用微机原理及应用实验——MOV指令的使用详解 当条件转移指令的条件不成立时此时的程序应该是顺序执行的 MOV AX, 2C16H MOV BX, 0F180H CMP AX, BX JAE ABOVE ;注意ABOVE由具体地址替代,下同。 XCHG AX,BX ABOVE:HLT MOV AX, 2C16H该指令把2c16这个16进制数送入ax: 该指令将f180这个16进制数送入bx: CMP是比较指令,若AX的值大于等于BX,则CF等于0,否则CF等于1
注意看,此时IP的值是0108 JAE ABOVEJAE是条件转移指令,当CF等于0时,IP的值变为ABOVE的值 由上一条命令的结果可知,现在CF的值为1,所以条件不成立,不会转移,当前指令执行后,IP会指向下一条指令,即IP的值会变为010A(若条件成立,IP的值会变为010B)
XCHG是交换指令,它能将两个操作数存储的内容交换 该指令执行前,AX的值为2C16H,BX的值为F180H 指令执行后,AX的值为F180H,BX的值为2C16H 如图所示: HLT是暂停指令,此时程序将中止 当条件转移指令的条件成立时此时的程序会跳过倒数第二行指令 MOV AX, 0FF66H MOV BX, 2020H CMP AX, BX JAE ABOVE ;注意ABOVE由具体地址替代,下同。 XCHG AX,BX ABOVE:HLTCMP是比较指令,若AX的值大于等于BX,则CF等于0,否则CF等于1 这里AX里的值比BX大,所以CF保持为0: JAE是条件转移指令,当CF等于0时,IP的值变为ABOVE的值 由上一条命令的结果可知,现在CF的值为0,所以条件成立,当前指令执行后,IP会指向ABOVE这个值的偏移地址,即IP的值会变为010C(若条件不成立,IP的值会变为010B) 该指令没有被执行 ABOVE:HLT执行到该指令后,程序中断 排序程序对带符号数从小到大排列(只将无符号数从小到大排序程序中的“JC NEXT3”改为“JL NEXT3”即可) 10个双字节(字)有符号数从小到大排序程序 DSEG SEGMENT BUFFER DW 0AAFEH,3768H,5CD9H,2227H,0BDC1H,725AH,0C236H DW 66FFH,0E23H,8577H DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START: MOV AX,DSEG MOV DS,AX LEA DI, BUFFER MOV BL,9 NEXT1: MOV SI,DI MOV CL,BL NEXT2: MOV AX,[SI] INC SI INC SI CMP AX,[SI] JL NEXT3 ;小于则不交换 MOV DX,[SI] MOV [SI-2],DX MOV [SI],AX NEXT3: DEC CL JNZ NEXT2 DEC BL JNZ NEXT1 MOV AH,4CH INT 21H CSEG ENDS END START |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |