文档详情

第4章 8086_8088汇编语言设计.ppt

发布:2017-08-05约字共205页下载文档
文本预览下载声明
* input 子程序流程图 调用09功能 显示输入提示 调用0A 功能 等待从键盘输入数据 RET返回 input PROC LEA DX , string MOV AH , 09H INT 21H LEA DX , num MOV AH , 0AH INT 21H RET input ENDP 06 04 31 32 33 34 0D 00 num 00 00 * change子程序流程图 (BX) ← 输入字符的数值大小 SI ← 数据串偏址 CX ← 数据串长度 AX ← 部分和初值0 DI ← 乘数10 Y N RET返回 AX←部分和乘10 (AX) ← (AX)+(BX) 形成新的部分和 修改SI指针, 指向下一位输入 BX←转换结果AX CX ← CX-1 CX=0? change PROC LEA SI, num+2 MOV CL, num+1 MOV CH, 0 MOV AX, 0 MOV DI, 10 next: MUL DI MOV BH, 0 MOV BL, [SI] AND BL, 0FH ADD AX, BX INC SI LOOP next zero: MOV BX, AX RET change ENDP 06 04 31 32 33 34 0D 00 num 00 00 1234D = ( ( ( 0×10 + 1 ) ×10 + 2 ) ×10 + 3 ) ×10 + 4 * 显示字符个数CH=4 循环移位次数CL=4 BX循环左移4位,将要显示的值移至低4位,保存在DL中 清DL 的高4位, 只保留要显示位的值 DL ← DL+30H 完成数值0~9的ASCII码转换 Y N DL←DL+07H 完成数值A~F的ASCII码转换 用02功能显示DL中的字符 Y N RET返回 DL 超出39H? CH ←CH-1转换结束? list_bx子程序流程图 list_bx PROC MOV CH, 4 MOV CL, 4 next: ROL BX, CL MOV DL, BL AND DL, 0FH ADD DL, 30H CMP DL, 39H JLE print ADD DL, 07H print: MOV AH, 2H INT 21H DEC CH JNZ next RET ;子程返回 list_bx ENDP code ENDS END start * 例3 程序存在的问题: 1.未处理输入非数字字符的情况 2.输入的十进制数范围为0~65535 3.当输入字符个数为0(直接回车)时,结果错误 4.未处理负数情况 5.结果的显示未换行 Input:1234 最后看到的是:04D2t:1234 * 编写子程序的注意事项: 注意子程序中PUSH、POP应成对,否则易造成死机。 data SEGMENT string DB ‘Hello’,’$’ data ENDS code SEGMENT ASSUME CS:code, DS:data start: MOV AX, data MOV DS, AX CALL input MOV AH, 4CH
显示全部
相似文档