RobotMan 发表于 2015-2-10 19:26:53

高手请进 汇编语言二 王爽的

;程序功能是将12666这个十进制数转化成前景色是绿色的字符串'12666'输出到dos窗口

assume cs:codesg
data segment
      db 16 dup (0)
data ends
codesg segment
      start:mov ax,12666
            mov bx,data
            mov ds,bx
            mov si,0
            call dtoc ;转到子程序,把原始数除10取余数,余数加30H就是所求字符串的其中一个字符,
                                          ;一直除到商为0,得到一个字符串,放到data段中

            mov dh,8
            mov dl,3
            mov cl,2
            call show_str ;转到子程序,将data段的字符串输出到屏幕

            mov ax,4c00h;退出程序
                          int 21h

                show_str:
                   mov ax,0B800h
                   mov es,ax
                   mov al,160
                   mul dh
                   mov di,0
                   add di,ax
                   add dl,dl
                   mov al,dl
                   mov ah,0
                   add di,ax
                   mov cx,10h
                   s:
                   mov al,   
                   mov ah,00000010B
                   mov es:,ax
                   inc si
                   add di,2
                   loop s
                   ret

       dtoc:
         push bx;保存各寄存器的值
         push dx
         push ds
         push si

         s0:
            mov dx,0;这里不把dx清零会报错,为什么?报这个错:Divide overflow??????-------------这是我的程序的问题:sad
            mov cx,10
            div cx      
            mov cx,ax

            add dx,30h
            mov ds:,dl
            inc si
            jcxz ok
            jmp s0

       ok:pop si
            pop ds
            pop dx
            pop bx
            ret
codesg ends
end start


a838961785 发表于 2015-2-12 13:31:03

楼主你的问题是什么?我这边能显示,不过显示的数据是反的
页: [1]
查看完整版本: 高手请进 汇编语言二 王爽的