|
|
[汇编程序]键盘上输入两个一位十进制数字,并将其转换成二进制数,再将它们相减后以两位十进制数字的形式输出结果 |
| ;------------------------------------------------------------------------------------------------;键盘上输入两个一位十进制数字,并将其转换成二进制数,再将它们相减后以两位十进制数字的形式输出结果;------------------------------------------------------------------------------------------------
;注:本程序中必须要有"push ax","pop ax"两条语句,不然程序虽然可以编译链接,但执行两数相减后会发生未知;错误,通过用debug进行跟踪反汇编后发现问题出在mov dl,'='这条语句,ax的值发生了变化,所以需要把ax值进;行恢复,因此要用此两条语句
code segment ;代码段 assume cs:code,ds:codestart: mov ax,code ;ax-->ds mov ds,ax mov ah,01h ;调用中断21的01号功能,从键盘接收一个数字并回显,键入第一个0~9数字→al int 21h mov bl,al mov dl,'-' ;显示'-' mov ah,02h int 21h mov ah,01h ;键入第二个0~9数字→al int 21h push ax ;将ax的值压入堆栈 mov dl,'=' ;显示'=' mov ah,02h int 21h pop ax ;弹出ax cmp bl,al ;比较输入的两个数的大小 jl fushu ;若bl<al,则跳到fushu段执行 sub bl,al ;bl-al mov dl,'+' ;'+'-->dl jmp show ;跳到show段进行执行fushu:sub al,bl ;al-bl mov bl,al xchg bl,al ;交换bl,al的地址 mov dl,'-' ;'-'-->dlshow: mov ah,02h ;显示字符 int 21h add bl,30h ;转换成ASCll码 mov dl,bl int 21h mov ah,4ch ;程序结束 int 21hcode ends end start
| |
|
|
|
|
| 不知哪里出错了,运行了就死机请指教 |
| ; 两个数相乘 5位数乘以1位数(十进制)。X*Y->ZSTACK SEGMENT STACK DB 200 DUP(?)STACK ENDSDATA SEGMENTx DB 5 DUP(0),'$'Y DB 1 DUP(0),'$'Z DB 6 DUP(0),'$'DATA1 DB 'INPUT A MULTIPLICAND $'DATA2 DB 'INPUT A MULTIPLIER $'DISP DB 'Result is $'CR DB 0DH,0AH,'$'DATA ENDSCODE SEGMENT ASSUME CS:CODE,SS:STACK,DS:DATABEGIN: MOV AX,DATA MOV DS,AX MOV ES,AX LEA DX,DATA1 MOV AH,5 INT 21H MOV AH,1 MOV X,AL LEA DX,DATA2 MOV AH,1 INT 21H MOV AH,1 MOV Y,AL
MOV BL,Y ;乘数的ASCII码送BL中 AND BL,0FH ;转换为BCD码 LEA SI,X+4 LEA DI,Z+5 MOV CX,5MLOP: MOV AL,[SI] AND AL,0FH MUL BL AAM ADD AL,[DI] AAA MOV [DI],AL DEC DI MOV [DI],AH DEC SI LOOP MLOP
LEA DX,X MOV AH,9 INT 21H MOV DL,'*' MOV AH,2 INT 21H MOV DL,Y MOV AH,2 INT 21H LEA SI,Z MOV CX,6TOASC: OR BYTE PTR [SI],30H INC SI LOOP TOASC LEA DX,DISP MOV AH,9 INT 21H LEA DX,Z MOV AH,9 INT 21H
MOV AH,4CH ;返回系统 INT 21HCODE ENDS END BEGIN | |
|
|
» 1 »
|