标题:显示一行字符串的程序为什么会显示2行?
取消只看楼主
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1728
专家分:3216
注 册:2015-12-2
结帖率:100%
已结贴  问题点数:20 回复次数:1 
显示一行字符串的程序为什么会显示2行?
DATA SEGMENT
   db 'welcome to masm!',0
DATA ENDS
CODES SEGMENT
    ASSUME CS:CODES,DS:DATA,ss:stack
START:
    MOV dh,1        ;行号
    MOV dl,1        ;列号
    mov cl,2        ;颜色
    mov ax,data
    mov ds,ax
    mov si,0
      call show_str
      
      mov ax,4c00h
      int 21h
show_str:
    stack segment   ;建立栈空间
    dw 0
    stack ends
    mov ax,stack
    mov ss,ax
    mov sp,2
    mov al,0a0h  ;一行有160个字节
    mul dh        ;ax保存第n行前的n行字节数
    push ax
    mov ax,0
    mov dh,0     ;
    mov al,dl
    mov dl,2
    mul dl       ;ax保存第m列前的m列字节数
    pop bx
    add ax,bx        ;行偏移地址加列偏移地址等于总偏移地址
    push ax
    pop bx
    mov ax,0b800h        ;段地址
    mov es,ax
s:    push cx
    mov cl,[si]
    mov ch,0
    jcxz ok
    pop cx
    mov es:[bx+1],cl     ;写入颜色
    mov al,[si]
    mov byte ptr es:[bx],al ;写入字符
    add bx,2
    inc si
    jmp short s
    ok: ret
CODES ENDS
    END START
预计在第一行第一列(开始是第0列,第0行)写入"welcome to masm",结果第0行和第一行都写了该字符串,怎么回事?
王爽的汇编语言p206面第一小题

[此贴子已经被作者于2020-7-28 23:55编辑过]

搜索更多相关主题的帖子: DATA MOV 一行 stack 显示 
2020-07-28 23:40
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1728
专家分:3216
注 册:2015-12-2
得分:0 
知道了,把mov dh,0这一段删除就可以了,可是为什么会这样呢?
多这一段好像对程序不够成影响呀?
2020-07-29 00:19



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-502683-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.515182 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved