1、 DI = 存放相应结果ASCII码串的首地址 例如: 若入口参数 AL = 93H, 则子程序返回时,DS:DI所指处将存有如下字符串: -109$.注: 该作业必须最迟在实验验收前一周上交.四. 实验要求(现场演示, 程序编辑除外)1. 编辑前述作业三完成的8086汇编源程序,然后进行汇编及连接以生成可执行文件.2. 执行程序, 演示如下各种输入情况:(a) 被除数与除数均为正数(b) 被除数与除数均为负数(c) 被除数与除数的符号位不同(d) 输入如下特殊情况: -128/1; 12345/11; 23/0; 1134/127; 1145/128; 32768/12345; -32769
2、/126.(e) 输入的除数值为: 你所在班级的最后两位数字 + 你在该班内的班内序号.3. 调用DEBUG软件对该可执行文件进行调试,并顺序完成如下所提要求或回答相关问题:(a) 设置相关断点,在输入完被除数并转换成等效的带符号二进制数后停下,指出所输入的被除数存放位置.(b) 设置相关断点,在输入完除数并转换成等效的带符号二进制数后停下,指出所输入的除数存放位置.(c) 设置相关断点, 在执行除法运算指令IDIV 之前停下,解释当前堆栈内容.(d) 输入合适的被除数与除数以便能引起0号除法溢出中断, 在执行到溢出中断服务程序的第一条指令前停下,检查并解释当前堆栈内容.DATA SEGMEN
3、Tinput1 DB 50 DUP(?)input2 DB 50 DUP(?COUNT1 DB ? ;计算被除数负号输入次数COUNT2 DB ?计算除数负号输入次数COUNT DB ?计算/输入次数C5 DB ?5次SUM1 DW ?存放被除数的大小SUM2 DB ?存放除数的大小cbei DW ?被除数位数cchu DW ?除数位数f1 DB ?beif2 DB ?-f3 DB ?chuYICHU DB ?溢出标志位CZ DB ?位数SEGDATA DW ?OFFDATA DW ?STRING1 DB Input error!,0DH,0AH,STRING2 DB 0DH,0AH,Divi
4、ded by 0!STRING3 DB 0DH,0AH,Overflow!STRING4 DB Please input again!STRING5 DB 0DH,0AH,OVERSTRSHOW DB 40 DUP(STRIN DB 50 DUP(STRHELP DB 0DH,0AH,换行STRHELP1 DB ,remainder=,STR5 DB Times=5DATA ENDSSTACK SEGMENT STACK STACK DB 1000 DUP (0)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA ORG
5、 100HINT00 PROC FAR POP CX ADD CX,2 PUSH CX MOV SEGDATA,SEG STRING3 MOV OFFDATA,OFFSET STRING3 CALL FAR PTR DISP MOV YICHU,1 IRETINT00 ENDPDISP PROC FAR ;显示子程序 PUSH AX PUSH DX PUSH DS MOV AH,09H ;显示字符串 MOV DX,SEGDATA MOV DS,DX MOV DX,OFFDATA INT 21H POP DS POP DX POP AX RETDISP ENDPSHOW PROC FAR MOV
6、 CZ,0 MOV DI,OFFSET STRSHOW CMP AL,0BJ1: JS BJ3 JNS BJ4BJ3: JNO FU ;最高位是1,次高位是1 JO ZHENG ;最高位是1,次高位是0BJ4: JO FU ;最高位是0,次高位是1 JMP ZHENG ;最高位是0,次高位是0FU: NEG AL ;负数的绝对值 MOV DL,2DH ;-号 MOV DI,DL INC DIZHENG: MOV AH,0 MOV BL,0AH DIV BL ;AL.AH MOV DH,AH MOV DL,0 ADD DH,30H INC CZ CMP AL,0 ;若商为不零,继续重复 JNZ
7、ZHENG MOV CL,CZ MOV CH,0LOOP10: MOV DI,DHLOOP LOOP10 MOV DL,24HSHOW ENDPSTART: MOV AX,DATA MOV DS,AX MOV ES,AX MOV C5,5HLOOPA: MOV COUNT1,1 MOV COUNT2,1 MOV COUNT,1 MOV SUM1,0 MOV SUM2,0 MOV f1,1 ; MOV f2,1 ; MOV f3,1 ; MOV SI,OFFSET input1 MOV DI,OFFSET input2 MOV cbei,0 MOV cchu,0 MOV YICHU,0 MOV
8、BX,OFFSET STRIN INPUT: MOV AH,1 CMP AL,1BH ;检测是否按下ESC退出键 JNZ A1 JMP OUTALL2A1: CMP AL,2DH ;若不是-号,跳到A JNZ A -号的处理 CMP f1,1 JZ G CMP f2,0 JZ DE: MOV SEGDATA,SEG STRHELP MOV OFFDATA,OFFSET STRHELP CALL DISP MOV SEGDATA,SEG STRING1 MOV OFFDATA,OFFSET STRING1 CALL DISP MOV SEGDATA,SEG STRING4 MOV OFFDATA
9、,OFFSET STRING4 JMP STARTG: CMP COUNT1,1 ;被除数是否只有一个- JNZ E DEC COUNT1 MOV BX,AL INC BX JMP INPUTD: CMP f3,1 CMP COUNT2,1 ;000 DEC COUNT2E3: JMP EA: CMP AL,2FH ;若不是/号,跳到B JNZ B/的处理 CMP f1,0 JNZ E3 CMP f2,1 CMP COUNT,1 DEC COUNT DEC f2 MOV BX,AL INC BXB: CMP AL,0DH ;若不是回车,跳到F JNZ F回车的处理 CMP f1,0 JNZ E
10、2 CMP f2,0 CMP f3,0 MOV DL,3DH ;=号 MOV BX,DL INC BX MOV DL,24H ;$ JMP OUT1F: CMP AL,30H ;判断输入的是不是数字 JL E2 CMP AL,39H JG E2 JNZ chushubeichu: MOV f1,0 MOV SI,AL INC SI MOV BX,AL; INC cbeichushu: MOV f3,0 MOV DI,AL INC cchu JMP INPUTJMP OUT1E2: JMP E3OUT1: CMP cbei,5 JL I ;被除数小于5位,在合理范围内,跳到IH: MOV SI,
11、OFFSET input1 ;输入的被除数是5位 MOV AL,SI SUB AL,30H CMP AL,3 ;判断5位被除数是否超出范围 JL I MOV AL,SI+1 SUB AL,30H CMP AL,2 MOV AL,SI+2 CMP AL,7 MOV AL,SI+3 CMP AL,6 MOV AL,SI+4 JLE I CMP AL,8 CMP COUNT1,0I: CMP cchu,3 JG E1 JL J ;除数小于3位,在合理范围内,跳到J MOV DI,OFFSET input2 ;输入的除数是3位 MOV AL,DI CMP AL,1 ;判断3位除数是否超出范围 JL J
12、 MOV AL,DI+1 CMP AL,2 MOV AL,DI+2 JLE J CMP COUNT2,0 JNZ E1 JZ JE1: JMP E2J: MOV CX,cbeiLOOP1: MOV BL,SI ;求出输入被除数的值 SUB BL,30H MOV BH,0 MOV AX,SUM1 MOV CL,3 SHL AX,CL SHL SUM1,1 ADD SUM1,AX ADD SUM1,BX LOOP LOOP1CMP SUM1,0JZ OUT0 MOV CX,cchu MOV DI,OFFSET input2LOOP2: MOV BL,DI ;求出输入除数的值 MOV AH,SUM2
13、 SHL AH,CL SHL SUM2,1 ADD SUM2,AH ADD SUM2,BL LOOP LOOP2 CMP SUM2,0 ;除数为零时,显示“Divided by 0!” JZ OUT0 JMP OUTDOSOUT0: MOV SEGDATA,SEG STRING2 MOV OFFDATA,OFFSET STRING2 JMP OUTALLOUTDOS: CMP COUNT1,0 JNZ K ;被除数为正数 NEG SUM1 ;被除数为负数,求补K: JNZ L ;除数为正数 NEG SUM2 ;除数为负数,求补L: STI ;允许中断 MOV AL,0 MOV AH,35H P
14、USH ES PUSH BX MOV AX,SEG INT00 MOV DX,OFFSET INT00 MOV AH,25H MOV AX,SUM1 ;计算出商和余数 MOV BL,SUM2 IDIV BL ;AL?AH MOV DS,CX CMP YICHU,1 JZ OUTALL1 MOV SEGDATA,SEG STRIN MOV OFFDATA,OFFSET STRIN PUSH AX ;显示商 CALL SHOW POP AX MOV SEGDATA,SEG STRSHOW MOV OFFDATA,OFFSET STRSHOW MOV SEGDATA,SEG STRHELP1 MOV
15、 OFFDATA,OFFSET STRHELP1 MOV AL,AH ;显示余数 JMP YOUTALL1:JMP OUTALLY: CALL DISP CMP SUM2,32H ;若输入的除数为50,则返回DOS JZ OUTALL DEC C5 CMP C5,0 JZ T5 JMP LOOPAT5: MOV SEGDATA,SEG STR5 MOV OFFDATA,OFFSET STR5 JMP OUTALL OUTALL2:MOV SEGDATA,SEG STRING5 MOV OFFDATA,OFFSET STRING5OUTALL: MOV AH,4CH INT 21HCODE ENDS END START
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2