运用汇编语言怎样以2进制、8进制、10进制、16进制方式输出10进制的数的计算结果。
assume cs:code data segment db 10 dup (0) data ends stack segment dw 8 dup (0) stack ends code segment start:mov ax,12666 mov bx,data mov ds,bx mov si,0 mov bx,stack mov ss,bx mov sp,16 call dtoc mov dh,8 mov dl,3 mov cl,2 call show_str mov ax,4c00h int 21h d...全部
assume cs:code data segment db 10 dup (0) data ends stack segment dw 8 dup (0) stack ends code segment start:mov ax,12666 mov bx,data mov ds,bx mov si,0 mov bx,stack mov ss,bx mov sp,16 call dtoc mov dh,8 mov dl,3 mov cl,2 call show_str mov ax,4c00h int 21h dtoc:push ax push cx push dx push si xor si,si s0:mov cx,10 ;除数赋给cx mov dx,0 ;以下操作取字符 call divdw ;调用不产生溢出的除法运算 add cx,30h push cx ;cx中保存的是子程序调用后得到的余数,入栈 inc si ;使用si记录有多少位数 mov cx,ax ;将商赋给cx,判断各位的数值是否全部求出 jcxz ok0 jmp short s0 ok0:mov cx,si xor si,si ;以下将得到各位数值保存到内存单元中 s1: pop ax mov [si],al inc si loop s1 mov byte ptr [si],0 pop si pop dx pop cx pop ax ret ;返回 divdw:push bx ;用bx暂存,先将其入栈,程序结束时还原原值 push ax ;将被除数的低16位入栈,下一步计算时用 ;以下进行被除数高16位与除数的除法运算 mov ax,dx ;将被除数的高16位赋给ax xor dx,dx ;被除数的高16位清零 div cx mov bx,ax ;将高位的商暂存在bx中 ;以下进行被除数低16位与除数的除法运算 pop ax ;将被除数低16位放入ax中,上步计算的余数作为本次运算的高16位,已默认在dx中 div cx ;商在ax中,余数在dx中 ;按程序要求将结果保存 mov cx,dx ;cx中保存结果的余数 mov dx,bx ;dx中保存结果的高16位,ax中保存着结果的低16位 pop bx ; 还原bx中的值 ret show_str:push ax push bx push cx push dx push es mov ax,0b800h mov es,ax dec dh mov ax,160 mul dh mov bx,ax mov ax,2 mul dl sub ax,2 add bx,ax mov di,0 mov al,cl s2: mov cl,[si] mov ch,0 jcxz ok mov es:[bx di],cl mov es:[bx di 1],al inc si add di,2 jmp short s2 ok: pop es pop dx pop cx pop bx pop ax ret code ends end start。
收起