注意第十项为10为数字长度超过int類型范围,需要将其设为long 型变量
注意第十项为10为数字长度超过int類型范围,需要将其设为long 型变量
?分支程序无论是在高级语言中還是在汇编语言中都是应用最广泛的也是最基本的程序结构。在汇编语言里进行分支程序设计中测试某些条件时经常用到的是比较指囹(CMP)、条件转移指令和无条件转移指令(JMP)。
1、概念:标号用来说明可执行指令在汇编语言中的位置另外,在汇编语言中过程名亦可以视为标号。
2、作用:标号可以作为转移指令(或调用指令CALL)的操作数
3、属性:和变量类似,标号有三种属性:
?如果以标号只能在本段中(即标号所定义的段中)用JMP或条件转移指令(或CALL)进行访问那么必须将这个标号的距离属性定义为NEAR。
?如果一个标号能为其它段中的JMP(或CALL)的指令来访问那么必须将这个标号属性定义为FAR。
1、隐含说明:距离属性为NEAR的标号可以用隐含的说明即:在标号后面加上冒号,放在指令前面
?L1、LOOP和@都是标号名(标识符)标号L1、LOOP和@的距离属性均為NEAR。
?距离属性为FAR的标号没有隐式的说明只能用显式说明,即只能用LABEL伪指令明显地说明或在EQU伪指令中用THIS操作符明显地指明。
2、在EQU伪指囹中用THIS操作符明显地指明
?标号L4和L5的距离属性均为FAR
1、SEG –取段地址
3、TYPE –取距離属性
TYPE 标号名
1、指令的执行顺序:指令的执行顺序有代码段寄存器(CS)和指囹指针寄存器(IP)的内容决定
2、CS:CS寄存器中存放有当前代码段的基地址。当前代码段就是正在从中取出指令(代码)的存储器部分其嫆量可达64K字节。
3、IP:IP中内容为要执行的下一条指令距当前代码段基地址的位移量(偏移地址)
4、下一条指令地址:CS和IP结合((CS)*16+(IP)),指向将从中取出下一条指令的存储单元
5、指令执行的过程:在大多数工作状态下,要执行的下一条指令已从存储器中取出并放在CPU的指令队列中等待执行。
6、转移指令的作用:转移指令对指令指针寄存器IP或代码段寄存器CS起作用改变这些寄存器的内容一般就会改变正常的執行顺序当程序发生转移时,指令队列中就不再有接下来要执行的指令总线接口单元将利用新的IP和CS值从存储器中取得下一条指令,直接把该指令传送给执行单元;然后开始从新的指令存储单元中取指令重新补充指令队列。
7、转移指令分类分4组:
一、JMP—无条件转移指令(C语言goto)
1、格式:JMP 目的操作数
2、功能:无条件地控制转移至目标单元(目的操作数)。
二、JMP指令的具体格式
1、段内(或组内)直接转移
(1)格式:JMP 标号名 ;标号为NEAR属性
?其中相对位移量的范围在-32K~+32K如果相对位移量为一个字节所能表示的范围-128~+127,那么可以用短(SHORT)转移
(1)格式:JMP 标号 ;标号为FAR属性
?在这个格式下汇编程序生成2个字的操作数(双字指示器)。JMP指令执行的操作是用第一个字即目标标号在其所在的段中的位移量去替换IP的内容,用第二个字即目标标号所在的代码段的段基址代替源CS的内容,以实现其转移例如:
一、CMP指令(比较指令)
1、格式:CMP 目的操作数,源操作数