当前位置: 代码迷 >> 汇编语言 >> 王爽<汇编语言>课件设计解决方法
  详细解决方案

王爽<汇编语言>课件设计解决方法

热度:8974   发布时间:2013-02-26 00:00:00.0
王爽<汇编语言>课件设计
我是prolove_000,郁闷了,散分散太多了...变得不能发帖.
问题:
  为什么debug不能调试呢?调试到mov ch,0就出现强制退出的状况...
Assembly code
assume cs:code,ds:data,ss:stackdata segment        db '1975','1976','1977','1978','1979','1980','1981','1982','1983'        db '1984','1985','1986','1987','1988','1989','1990','1991','1992'        db '1993','1994','1995',0        dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514        dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000,0        dd 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226,11542,14430,15257,17800,0        dw 5,3,42,104,85,210,123,111,105,125,140,136,153,211,199,209,224,239,260,304,0data endsstack segment    dw 8 dup(0)stack endscode segmentstart:    mov ax,data        mov ds,ax        mov bx,0        mov ax,stack        mov ss,ax        mov sp,16        mov ax,0b8000h                ;把显存地址放入ax寄存器中        mov es,ax                    ;再把ax中的显存地址放入es中        mov di,0                    ;把di设置控制ds中的列        mov si,0                    ;控制es的行        call pw                mov ax,4c00h        int 21h        pw:        push bx        push di        push si        push cx        push bx        mov cl,[bx]                    ;把[bx]=0这个地址中的内容存放到cl中        mov ch,0        mov es:[si],cl                ;把cl的内容存放到        jcxz pe        mov dl,0A0h                    ;显存中一行有160个字节,所以存到cx中        mul dl                        ;因为一行有160个字节,所以乘以cx可以把光标定位到下一行        mov si,ax                    ; 把光标定位到下一行起始地址        inc bx        inc si        jmp short pwpe:        mov si,0                    ;把si光标从新定位到0这个位置        mov si,0ah                    ;把光标设定到第一行第10个字节处        mov dx,ds:[bx]                    ;把data段中定义的dword数据的高字节[bx]存放到dx中        mov ax,ds:[bx+4]                ;把data段中定义的dword数据的低字节[bx+2]存放到ax中        mov cx,dx                    ;把dx中的内容扔到cx中        mov es:[si],cx                    ;把cx中的内容放到[si]处        mov cx,ax                    ;把把低字节ax放到cx处        mov es:[si+4],cx                ;把cx中的内容放到[si+4]处        jcxz pb        mov dl,0a0h                    ;显存中一行有160个字节,所以存到cx中        mul dl                        ;因为一行有160个字节,所以乘以cx可以把光标定位到下一行        mov si,ax                    ; 把光标定位到下一行起始地址        add bx,4                    ;把ds中的光标定位到下一个地址        add si,4                    ;把es中的光标定位到下一个地址        jmp short pe        pb:        mov si,0        mov si,1Dh                    ;把光标定位到第一行的29字节处        mov dx,ds:[bx]                    ;把data段中定义的dword数据的高字节[bx]存放到dx中        mov ax,ds:[bx+4]                ;把data段中定义的dword数据的低字节[bx+2]存放到ax中        mov cx,dx                    ;把dx中的内容扔到cx中        mov es:[si],cx                    ;把cx中的内容放到[si]处        mov cx,ax                    ;把把低字节ax放到cx处        mov es:[si+4],cx                ;把cx中的内容放到[si+4]处        jcxz pm        mov dl,0a0h                    ;显存中一行有160个字节,所以存到cx中        mul dl                        ;因为一行有160个字节,所以乘以cx可以把光标定位到下一行        mov si,ax                    ; 把光标定位到下一行起始地址        add bx,4                    ;把ds中的光标定位到下一个地址        add si,4                    ;把es中的光标定位到下一个地址        jmp short pepm:        mov si,0        mov si,25h        mov cx,ds:[bx]        mov es:[si],cx        jcxz over        mov dl,0a0h        mul dl        mov si,ax        add bx,2        add si,2        jmp short pm        over:    pop bx        pop ax        pop bx        pop di        pop si        pop cx        retcode endsend start


------解决方案--------------------------------------------------------


mov cl,[bx] 还是最好写明段寄存器。

其他可能还有点小问题。


这道题目是将这些数据计算下然后再显示吧?
王爽这道题目是考子程序的应用。把以前做的几个子程序直接调用,然后再多加点代码就行了。


把以前做的子程序直接赋值过来,包括那个标号,然后直接用CALL调用标号就行了。

先是用CALL调用以前计算工资什么的子程序
计算好了后不是会以字符串的形式存放在内存中吗?
这样不就简单了,另外一个子程序是根据的位置来显示某个字符串。
  相关解决方案