竖子小子傻子 发表于 2014-12-1 10:36:41

课程设计1

将两个数字转化成字符串并输出,代码如下:
assume cs:code

data segment
    dd 12345,1266688
data ends

stack segment
    dw 8 dup(?)
stack ends
code segment
start:
    mov ax,data
        mov ds,ax
        mov si,0
       
        mov ax,0b800h
        mov es,ax
        mov bp,12*160+20*2
        mov di,0
       
        mov ax,stack
        mov ss,ax
        mov sp,10h
       
        mov cx,2          ;两个数两次循环
s: push cx         ;将cx压栈;后面会用到cx寄存器
    call dtoc            ;调用函数,他会将数字转化成字符串显示出来
        pop cx
        add si,4
        loop s
       
    mov ax,4c00h
        int 21h

dtoc:
    mov ax,
        mov dx,             ;被除数

dt0:call divdw            ;调用divdw
    mov cx,ax               ;把低八位的商赋给cx,为零则跳转,不为零则继续执行
    jcxz dt1
        add bx,30h               ;转化成字符
        push bx                  ;将字符压入栈中压榨
        inc di                   ;记录压入栈的字符的个数
        mov cx,0ah            ;把除数赋给cx
        jmp short dt0
       
        mov cx,di                ;把压入栈的字符的个数赋给cx,即为循环次数
dt1:pop es:            ;把字符存放在显存段中
        mov byte ptr es:,02h;设置显示字符为绿色
        add bp,2
        loop dt1
        ret
       
divdw:                           ;不会溢出的除法运算,将商的低八位保存在ax,高八位保存在dx,余数保存在bx中。借助王爽老师课本的公式。
    mov cx,dx                      ;将被除数的高八位赋给cx,为零则进行普通的除法运算
        jcxz divdw1
        mov cx,0ah
        push ax                        ;将ax压入栈
        mov ax,dx                      ;把被除数的高八位传给ax
        div cl                        
        mov bl,al                      ;把商给bl;之后会赋给dl,这就是高八位的商
        mov dl,ah                      ;把余数给dl,与ax组成新的被除数
        pop ax
        div word ptr cx               
        mov cx,dx                        ;把余数赋给cx
        mov dl,bl                     ;将高八位的商给bx
        mov bx,cx                     ;余数保存在bx中,因为cx之后还要用
        ret
divdw1:
    mov cx,0ah
    div cx
    mov bx,dx
        mov dx,0
    ret       
code ends
end start
直接运行出现divide overflow,单步调试到mov cx,dx就会出现下图的错误:


在线等解答!!!

竖子小子傻子 发表于 2014-12-1 10:39:50

assume cs:code

data segment
    dd 12345,1266688
data ends

stack segment
    dw 8 dup(?)
stack ends
code segment
start:
    mov ax,data
        mov ds,ax
        mov si,0
       
        mov ax,0b800h
        mov es,ax
        mov bp,12*160+20*2
        mov di,0
       
        mov ax,stack
        mov ss,ax
        mov sp,10h
       
        mov cx,2          ;两个数两次循环
s: push cx         ;将cx压栈;后面会用到cx寄存器
    call dtoc            ;调用函数,他会将数字转化成字符串显示出来
        pop cx
        add si,4
        loop s
       
    mov ax,4c00h
        int 21h

dtoc:
    mov ax,
        mov dx,             ;被除数
   
dt0:call divdw            ;调用divdw
    mov cx,ax               ;把低八位的商赋给cx,为零则跳转,不为零则继续执行
    jcxz dt1
        add bx,30h               ;转化成字符
        push bx                  ;将字符压入栈中压榨
        inc di                   ;记录压入栈的字符的个数
        mov cx,0ah            ;把除数赋给cx
        jmp short dt0
       
        mov cx,di                ;把压入栈的字符的个数赋给cx,即为循环次数
dt1:pop es:            ;把字符存放在显存段中
        mov byte ptr es:,02h;设置显示字符为绿色
        add bp,2
        loop dt1
        ret
       
divdw:                           ;不会溢出的除法运算,将商的低八位保存在ax,高八位保存在dx,余数保存在bx中。借助王爽老师课本的公式。
    mov cx,dx                      ;将被除数的高八位赋给cx,为零则进行普通的除法运算
        jcxz divdw1
        mov cx,0ah
        push ax                        ;将ax压入栈
        mov ax,dx                      ;把被除数的高八位传给ax
        div cl                        
        mov bl,al                      ;把商给bl;之后会赋给dl,这就是高八位的商
        mov dl,ah                      ;把余数给dl,与ax组成新的被除数
        pop ax
        div word ptr cx               
        mov cx,dx                        ;把余数赋给cx
        mov dl,bl                     ;将高八位的商给bx
        mov bx,cx                     ;余数保存在bx中,因为cx之后还要用
        ret
divdw1:
    mov cx,0ah
    div cx
    mov bx,dx
        mov dx,0
    ret       
code ends
end start
代码重发一次,刚刚没看到这个功能。。。。

帅哥星 发表于 2014-12-2 19:59:13

竖子小子傻子 发表于 2014-12-4 20:10:03

帅哥星 发表于 2014-12-2 19:59
只为鱼币而来

然后呢?

xx6625303 发表于 2015-2-16 13:07:11

我也是差点鱼比:mad:

傲天 发表于 2015-2-28 01:51:04

你的代码我试了下,有一处错误,编译不过,提示在65行处
页: [1]
查看完整版本: 课程设计1