王爽汇编语言 实验10-数值显示

    科技2022-07-11  116

    assume cs:code data segment db 10 dup (0) data ends code segment start:mov ax,12666 mov bx,data mov ds,bx mov si,0 call dtoc mov dh,8 mov dl,3 mov cl,2 call show_str mov ax,4c00h int 21h ;功能:将word型数据转变为表示十进制数的字符串,字符串以0为结尾符。 ;参数:(ax)=word型数据,ds:si 指向字符串的首地址。 ;返回:无。 ;应用举例:编程,将数据12666以十进制的形式在屏幕的8行3列,用绿色显示出来。在显示时我们调用本次实验中的第一个子程序 show_str。 dtoc: push dx push si push cx push bx push di ;保存主程序中的寄存器数据 mov bx,10 ;因为商1266>256,所以用32位被除数的除法 dtoc_s: sub dx,dx ;将word型数据转变为表示十进制数的字符串,求余出来是倒置的,所以用栈转正。 div bx mov cl,dl add cl,30h push cx ;压栈只能用16位 inc di ;用来记录压入栈的数量,也就是数值的位数,比如12666有五位,di就等于5 mov cx,ax inc cx loop dtoc_s mov cx,di dtoc_s1:pop ax mov [si],al inc si loop dtoc_s1 pop di pop bx pop cx pop si pop dx ret ;子程序show_str具体过程看实验10显示字符串代码 show_str: push dx push ax push es push bx push si push cx mov cl,dh mov ch,0 mov ax,0 jcxz a s: add ax,0a0h loop s a: mov cl,dl jcxz a1 s0: add ax,2 loop s0 a1: mov bx,ax mov ax,0b800h mov es,ax pop ax show: mov cl,[si] jcxz ok mov es:[bx+1],al mov es:[bx],cl inc si add bx,2 jmp short show ok: push ax pop cx pop si pop bx pop es pop ax pop dx ret code ends end start
    Processed: 0.009, SQL: 8