全球旧事资料 分类
定义堆栈STACKSEGMENTSTACKSTACKDB100DUP0STACKENDSCODESEGMENTASSUMEDSDATACSCODEESCODESSSTACK打印字符串的宏PRINTMACROPARAPUSHAXPUSHDXMOVAH09H
第43页
f微机原理软件实验报告
MOVINTPOPPOPENDM主程序入口MAINMOVAXDATAMOVDSAXMOVAX0MOVESAX保存原中断向量表MOVAXWORDPTRES0000HDXOFFSETPARA21HDXAX
PUSHAXMOVAXWORDPTRES0002H
PUSHAX写入新的中断处理子程序地址MOVWORDPTRES0000HOFFSETINT0MOVWORDPTRES0002HSEGINT0CALLINPUT获取输入MOVMOVMOVDIVCMPJNEDXWORDPTRXX移入被除数高16位AXWORDPTRXX2移入被除数低16位BXYY移入除数BX进行32位除法运算FLAG0查看是否调用了中断处理程序,即可判断是否溢出ISOF溢出跳转,到扩充除法的结果输出
否则直接输出没有溢出的正常除法结果PRINTTIP1MOVBXAX
CALLDISP2PRINTCRPRINTTIP2MOVBXDX
第44页
f微机原理软件实验报告
CALLDISP2JMPEOP
有溢出的时候需要输出32位商和16位余数ISOFPRINTTIP1MOVBXDX
CALLDISP2MOVBXAX
CALLDISP2PRINTCRPRINTTIP2MOVBXCX
CALLDISP2EOPPOPAX程序结束出口
恢复中断向量表MOVPOPMOVMOVINTWORDPTRES0002HAXAXWORDPTRES0000HAXAX4C00H返回DOS21H
新的0号中断子程序INT0POPADDSISI2修改IP的值,指向DIV后的指令BX0判断除数是否为0DIV0为零则提示除数为0,然后返回DOSFLAG1置标志为除数不为零溢出
PUSHSICMPJEMOV
进行扩展除法运算,分别用除数除以被除数高16位和低16位输出参数为DX:商高16位,AX:商低16位,CX:16位余数PUSHAXMOVAXDX
第45页
f微机原理软件实验报告
XORDIVMOVPOPDIVDXDX除前将DX清零BX高16位除法CXAX保存商的高16位AX取出被除数低16位BX低16位除法
XCHGCXDX同时保存余数和商的低16位JMPDIV0PRINTERR0被零除错误打印MOVINTEXITIRET获取用户输入二进制序列的代码INPUTPROCNEARPUSHAXPRINTTIP3CALLGETIN调用获取一次输入缓冲,得到16位二进制码CALLCHANGE对字符进行转换,得到二进制序列MOVMOVAXTMPWORDPTRXX0AX保存被除数高16位AX4C00H返回DOS21HEXIT
PRINTCRPRINTTIP4CALLGETINCALLCHANGEMOVMOVAXTMPWORDPTRXX2AX保存被除数低16位
PRINTCRPRINTTIP5CALLGETINCALLCHANGEMOVMOVAXTMPYYAX保存除数
PRINTCR
第46页
f微机原理软件实验报告
POPRETINPUTENDP缓冲区0、1字符序列转换为二进制r
好听全球资料 返回顶部