. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  大家这么高兴致,我也帖下我的实验一和实验二的代码  [待解决] 回复[ 2次 ]   点击[ 309次 ]  
13784632020
[帖 主]   [ 发表时间:2010-07-25 15:03 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2010-07-02 05:46
实验一的:
       ASSUME    CS:CODE,DS:DATA,SS:STACK
        DATA  SEGMENT
              DB        'Welcome to masm!',0
        DATA  ENDS
       STACK  SEGMENT
              DW        0,0,0,0,0,0,0,0
       STACK  ENDS
        CODE  SEGMENT
      START:  MOV       AX,DATA
              MOV       DS,AX       ;设置Data段为DS段
                MOV       AX,STACK
              MOV       SS,AX
              MOV       SP,10H      ;设置栈段
                MOV       SI,0        ;设置SI变量,Ds:si指向数据段起始位置,si用于控制数据位变化
                MOV       DI,0        ;设置行变量,以0a0h为基数变化,(实际输出行未变化)
                MOV       DH,8        ;行变量参数
                MOV       DL,3        ;列变量参数
                MOV       CL,2        ;输出字符属性参数
                MOV       CH,0
              CALL      SHOW_STR    ;

              MOV       AX,4C00H    ;
              INT       21H         ;

   SHOW_STR:  PUSH      CX          ;因为要用到CX,所以先将CL入栈
                MOV       AX,0B800H   ;
              MOV       ES,AX       ;用ES段做显示输出
                MOV       AL,0A0H     ;每行字符数
                MOV       AH,0        ;
              MUL       DH          ;定位字符输出行,即第8行起始地址
                PUSH      AX          ;将行参数保存
                MOV       AL,2        ;
              MOV       AH,0        ;
              MUL       DL          ;定位字符输出列
                MOV       BX,AX       ;将列参数送入BX中
                POP       AX          ;提取行参数
                ADD       BX,AX       ;行列参数都保存到bx中
                MOV       AL,DS:[SI]  ;将数据段字符送入AL
              MOV       CL,DS:[SI]  ;如该数据为0,
                JCXZ      OK          ;则跳转至OK处断续执行,如否,则向下执行
                POP       CX
              MOV       ES:[BX+DI-0A0H-2H],AL   ;将ds:[si]处内容输出到屏幕
                MOV       ES:[BX+DI-0A0H-1H],CL   ;输出上行内容的属性值
                INC       SI          ;将ds:[si]指向下一字符
                ADD       DI,2H       ;将目的地址指向下一单元,字符和属性值各占一个字节,所以加2
              JMP       SHOW_STR    ;因ds:[si]内容不为0,指令跳转到标号开始形成循环

         OK:  RET
        CODE  ENDS
              END       START


实验二:
       ASSUME    CS:CODE,SS:STACK
       STACK  SEGMENT
              DD        0,0,0,0
       STACK  ENDS
        CODE  SEGMENT
      START:  MOV       AX,STACK
              MOV       SS,AX
              MOV       SP,10H
              MOV       AX,4240H
              MOV       DX,0FH
              MOV       CX,0AH

              CALL      DIVDW

              MOV       AX,4C00H
              INT       21H

      DIVDW:  PUSH      CX          ;保存cx原值
                MOV       CX,100      ;cx取新值参与运算
                MOV       BX,10       ;新值为原值bx倍
                DIV       CX          ;用新值运算,商存Ax中,余数存dx中
                POP       CX          ;弹出原值
                PUSH      DX          ;余数入栈,以免下步结果覆盖
                MUL       BX          ;商乘倍数
                MOV       [SI],DX     ;保存可能产生的高16值
                POP       DX          ;弹出上步计算余数
                PUSH      AX          ;保存上步计算结果
                MOV       AX,DX       ;上步计算余数送入ax,(如果超过0FFFF?)
              MOV       DX,0        ;
              DIV       CX          ;
              MOV       CX,DX       ;把最后计算余数送入cx
              MOV       BX,AX
              POP       AX
              ADD       AX,BX
              MOV       DX,[SI]
           
              RET

        CODE  ENDS
              END       START


    这个结果虽然正确,但经过与别人对比,发现问题其实老大了。总体思路来说,要解决除尘溢出,要么把被除数分开计算,要么把除数分开计算。但很明显,被除数分开比除数分开简单的多,教材中给的提示也应该是将被除数分开,只是兄弟愚蒙,没看明白教材的意思,按自己的想法,用的除数分开的方式写的,虽然结果正确,但感觉如果子程序中第一次商值与第二次商值相加产生进位的情况的话,我这个就出问题了。可是,我又解决不了,想了半天也没好办法。
masmaster
[第1楼]   [ 回复时间:2010-07-25 15:37 ]   [引用]   [回复]   [ top ] 
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19
good~~~~
imandry
[第2楼]   [ 回复时间:2010-07-25 18:02 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:6
注册日期:2010-07-13 10:33
http://www.asmedu.net/blog/user/mypost.jsp?neighborId=32708&kindLevel=1&kindId=46836
吾的代码全贴这里了……
好开心~好兴奋~3小时完成了整个实验10~10.2和10.3还是直接编译输出就通过的~~~好想找个什么东西抱抱~
好想发个表情啊……
OK~冷静……Boss在后面……
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved