当前位置: 代码迷 >> 汇编语言 >> 老师布置的作业,写了挺久,还是有异常,帮个忙吧,帮小弟我看看异常在哪
  详细解决方案

老师布置的作业,写了挺久,还是有异常,帮个忙吧,帮小弟我看看异常在哪

热度:126   发布时间:2016-05-02 04:26:07.0
老师布置的作业,写了挺久,还是有错误,帮个忙吧,帮我看看错误在哪
data SEGMENT
    msg1 dw 12,13,14,15,16,17,18,19,20,21,'$'
    msg2 dw 0,0,0,0,0,0,0,0,0,0,'$'
    r db 0    ;储存余数
    t db 0    ;储存商
    data ENDS
 
code SEGMENT
     ASSUME CS:code,DS:data
start:
          MOV AX,data
          MOV DS,AX
          mov si,0       ;bdbkfdfs
next:     cmp si,20
          jz  exit
          mov ax,2
          div msg1[si]          ;判断是否为奇数
          mov r,ah
          cmp r,0
          jns  jum                ;若是,跳转至jum
          mov ax,msg1[si]
          mov msg2[si],ax    ;dvbhbfjshdfs
          add si,2
          jmp next
        

jum:     mov ax,10          ;dbshdfsd
         div msg1[si]
         mov r,ah
         mov t,al
         mov bl,10
         mul bl
         add ax,ah           ;dbfshbdfsd
         mov msg2[si],ax
         add si,2
         jmp next
exit:
         mov ah,10h
         int 21h
 
code ENDS
END start
------解决思路----------------------
感觉你 div 指令理解有误,div ?? 是 ax/?? 而非 ??/ax
------解决思路----------------------
刚学汇编 7 天,就要写出来数组打印功能,有些要求高了。还是建议照着教材按部就班地来,开始时,一般都是在 debug 里调试运行查看结果的吧,尽管对你这样的程序要求来说,有些不那么直观。
将数组打印出来,一般就是一个循环,循环体内打印一个数据;数据的打印,网上有很多例子可参考的,或者下个 irvine16.lib 来看看它的 WriteInt() 子程。
------解决思路----------------------
同意楼上,div指令用法不对。
div是整除指令,被除数默认放在ax中(当然也有放在dx和ax中的,暂时不管),操作数为除数,商放在al中,余数放在ah中。

mov    ax,4
mov    bl,3
div    bl
表示4/3,得1放在al中,余1放在ah中。
要把字符串显示出来可以用dos中断的功能,具体参考http://blog.csdn.net/a1193561652/article/details/42326753
不过你们老师只是想让你们用debug查看结果吧。
  相关解决方案