摘要:
第26节 2012.12.05一、子程序的功能调用**调用子程序前必须将下一条指令地址PUSH有段内、段间区分近调用、进返回、远调用、远返回(1)段内过程调用指令CALL DSTSP<- SP[SP]<- IPIP<- IP+disp(机器中指令的偏移地址)(2)段内间接调用CALL OPRD(字存储单元)CALL BX(十六位寄存器)(3)段间直接调用CALL 过程名CALL FAR PTRSUBRO先把返回地址的断值压入堆栈,再把返回地址的偏移压栈,返回时分别送CS,IP(4)段间间接调用CALL OPRD;;;双字存储单元先把返回地址的断值压入堆栈,再把返回地址的偏移压 阅读全文
摘要:
第二十四节顺序程序设计datasegmentbcd_buf db 96hasc_buf db 2dup(?)dataendscodesegmentassumecs:code,ds:datastart:mov ax,datamov ds,axmov al,bcd_bufmov bl,almov cl,4shr al,cladd al,30hmov asc_buf,aland bl,0fhadd bl,30hmov asc_buf+1,blcode endsend start换码指令XLAT ;寄存器(BX+AL)内容---->AL,BX为表的首地址MOV AH,4CH ;返回到DOS状态, 阅读全文
摘要:
第二十一节地址表达式变址寻址:MOV AX,VARW+4等价于MOV AX,VARW[4]基址加变址寻址方式:VARW[BX][DI][VARW+BX+DI]VARW[BX+DI]均等价1,变量和标号的属性都代表存储单元。变量表示存储单元中存放数值标号表示存储单元中存放的是机器指令代码都具有如下三种属性(1)段值(2)偏移(3)类型DB,DW,DD NEAR,FAR数据定义语句VARB DB 3WARW DW -1234BUFF DB 100,3+4,5*6(1)定义字节数据项COUNT DB 100DB 0DH,0AH,'$'TABLE DB 0,1,4,9,16(2)定义字 阅读全文
摘要:
第十一节NEGOPRD 取补指令操作数为-128和-32768取补操作数不变OF=1操作数为0时求补运算的结果使CF=0,其他情况为1操作数为双字时:DXAX则NEGDXNEGAXSBBDX,0CMPOPRD1,OPRD2 比较指令,和减法一样运算,但结果不送到OPRD1影响全部标志位根据ZF是否置位来判断两者是否相等双精度数操作:通常DX存放高位字AX放低位字MOVAX,XMOVDX,X+2ADDAX,YADCDX,Y+2;高位加,这里用ADC加上进位CF数值,同样SBB用在高位减法从低位开始加、减。然后高位相加用ADC、SBB加上进位或减去借位DX高16位AX低16位当前数段DS为1B00 阅读全文
摘要:
关于汇编的教程好多,我看的是中山大学的汇编语言,个人爱好,还请朋友多多帮忙,不正确的地方看到请告诉我,谢谢。一、寄存器cl寄存器移位的位数,循环的次数DX寄存器做32位乘除法时存放被除数16位存放余数SI、DI多用于字符串的操作SP:栈顶地址、BP:基址堆栈指针标志位:CF 进位标志ZF 反应运算结果是否为0,为0则ZF置1SF 与运算结果的最高位相同,负数。SF=1OF 溢出标志PF 奇偶标志:判断低8位1的个数,为偶数置1AF 辅助进位标志状态控制标志:DF 方向标志(串操作)IF 中断允许标志,IF=1,CPU响应可屏蔽中断TF 单步标志2^8=128FF2^16=65535FFFF二. 阅读全文