首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 大家帮我看看哪错了 [已结贴,结贴人:bobvv]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bobvv
    • 等级:
    发表于:2008-05-10 14:26:33 楼主
    我编了一段代码想实现输出以下字符
            *
          ***
          *****
        *******
    我写的代码如下:
    DATA  SEGMENT
            DA1  DB        0AH
            DA2  DB        20H
            DATA  ENDS
            CODE  SEGMENT
                  ASSUME    CS:CODE,DS:DATA
          START:  MOV      AX,DATA
                  MOV      DS,AX
                  MOV      CX,7
                  MOV      SI,1

          LOOP2:  SUB      CX,1
                  SHL      CX,1
          LOOP3:
                  MOV      DL,DA2
                  INT      21H
                  LOOP      LOOP3

                  PUSH      CX
                  MOV      CX,SI
          LOOP4:  MOV      DX,'*'
                  MOV      AH,02H
                  INT      21H
                  INC      DL
                  LOOP      LOOP4
                  MOV      DL,DA1
                  INT      21H
                  POP      CX
                  ADD      SI,2
                  LOOP      LOOP2
                  MOV      AH,4CH
                  INT      21H
            CODE  ENDS
                  END      START
    请各位该人指点哪错了?
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bobvv
    • 等级:
    发表于:2008-05-10 18:23:021楼 得分:0
    上面那句话不小心打错了,应该是请各位而高人指点,大虾们都来帮帮我吧!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-10 20:34:282楼 得分:0
    让楼主参考一下吧,不一定符合你的要求。
    DATA  SEGMENT
          CRLF1  DB        13,10,'$'
            DATA  ENDS
            CODE  SEGMENT
                  ASSUME    CS:CODE,DS:DATA
            MAIN  PROC      FAR
                  PUSH      DS
                  MOV      AX,DATA
                  MOV      DS,AX
                  MOV      SI,1
                  MOV      CX,7
          LOOP2:  PUSH      CX
                  MOV      CX,SI
                  MOV      dl,'*'
                  MOV      AH,02H
          LOOP1:  INT      21H
                  LOOP      LOOP1
                  CALL      CRLF
                  INC      SI
                  POP      CX
                  LOOP      LOOP2
          EXIT:  POP      DS
                  MOV      AX,4C00H
                  INT      21H
            MAIN  ENDP
            CRLF  PROC
                  LEA      DX,CRLF1
                  MOV      AH,09H
                  INT      21H
                  RET
            CRLF  ENDP
       
            CODE  ENDS
                  END      MAIN
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cnzdgs
    • 等级:
    发表于:2008-05-10 21:49:543楼 得分:0
    调用INT 21H之前,AX(至少是AH)需要赋值。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-10 23:08:434楼 得分:20
    COUNT EQU    7
    data  segment
        da1  db        0dh, 0ah, '$'
        da2  db        ' '
    data  ends
    code  segment
        assume    cs:code,ds:data
    start:
        mov      ax,data
        mov      ds,ax

        mov      cx, COUNT

    loop2:
        push cx                    ;22222222222222222222
        ;换行
        lea dx, da1
        mov ah, 9
        int 21h

        ;打印空格

        dec cx
        cmp cx, 0
        je next
        lea si, da2
        mov dl, [si]
    loop3:
        mov ah, 2
        int 21h

        loop loop3


        pop cx        ;恢复,再次保存
        push cx
        mov dx, COUNT
        sub dx, cx
        mov cx, dx
        add cx, cx
        inc cx
        mov dl, '*'
    loop4:
        mov ah, 2
        int 21h
        cmp cx, 0
        je next
        loop loop4

    next:
        pop cx                    ;22222222222222222222
        loop loop2

        mov      ah,4ch
        int      21h
    code  ends
        end      start
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bobvv
    • 等级:
    发表于:2008-05-10 23:09:495楼 得分:0
    给AX赋值后还是无法运行,大虾们再仔细查查还有哪些错误
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bobvv
    • 等级:
    发表于:2008-05-10 23:13:096楼 得分:0
    四楼的大虾太强了,佩服佩服。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-10 23:20:327楼 得分:0
    不强,是用debug调试的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bobvv
    • 等级:
    发表于:2008-05-11 21:36:508楼 得分:0
    还想请教一下,da1  db 0dh, 0ah, '$' 为什么要这样定义?它们是回车和换行的意思吧,它们两个有什么区别?只定义成0dh或者0ah为什么输出结果不对?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bobvv
    • 等级:
    发表于:2008-05-11 21:52:129楼 得分:0
    还有用绿字解释说明部分为什么要恢复在保存?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 09:56:0810楼 得分:0
    0dh, 0ah, 是dos下定义的,'$'是汇编定义的
    pop cx再push cx,主要是需要恢复cx的值,再push是因为后面还有一个pop
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    世纪乐知(北京)网络技术有限公司 版权所有 京 ICP 证 020026 号
    Copyright © 2000-2007, CSDN.NET, All Rights Reserved