Co27Ti22 发表于 2018-6-28 11:42:08

关于显示字符串的问题

assume cs:codesg,ds:datasg,ss:stacksg

stacksg segment
        dw 10 dup(0)
stacksg ends

datasg segment
        db 'Welcome to masm!',0
datasg ends

codesg segment
start:
        mov ax,datasg
        mov ds,ax
        mov ax,stacksg
        mov ss,ax
        mov sp,10
       
        mov si,0
        mov dh,0        ;行
        mov dl,79        ;列
        mov cl,01001001b
       
        call show_str
       
        mov ax,4c00h
        int 21h
       
show_str:
        mov bl,cl       
        mov ax,0B800h
        mov es,ax
        mov al,160
        mul dh
        add dl,dl
        mov dh,0
        add ax,dx

        add ax,160        ;这里要加上160

        mov di,ax
        mov ch,0
       
loop1:
        mov cl,ds:
        jcxz ok
        mov es:,cl
        inc di
        mov byte ptr es:,bl
        inc di
        inc si
        jmp loop1
ok:
        ret

codesg ends

end start

用以上的代码在指定位置显示字符串

明明在debug时算出的偏移地址是正确的,但还是要加上A0h才能正常显示

并且最底端一行不管加不加0Ah都无法正常显示

请问如何解决

人造人 发表于 2018-6-28 12:58:57

Co27Ti22 发表于 2018-6-28 18:12:12

同样的代码,我这边效果是这样的
F:\tools\asmtools\1.png
在debug时,明明加0Ah之前的偏移地址就是正确的,但要加0Ah才能得到正确的结果,否则行数总是差1

Co27Ti22 发表于 2018-6-28 18:12:53

F:\tools\asmtools\1.png

Co27Ti22 发表于 2018-6-28 18:14:03

Co27Ti22 发表于 2018-6-28 18:12
同样的代码,我这边效果是这样的

在debug时,明明加0Ah之前的偏移地址就是正确的,但要加0Ah才能得到正 ...

图片发不了,但总之结果就是在第一行行尾开始显示

人造人 发表于 2018-6-28 18:29:37

Co27Ti22 发表于 2018-6-28 18:42:06

效果就是这样

人造人 发表于 2018-6-28 19:22:40

Co27Ti22 发表于 2018-6-28 18:42
效果就是这样

先执行一条命令
cls

Co27Ti22 发表于 2018-6-28 19:41:37

感谢
正确了

Co27Ti22 发表于 2018-6-28 19:42:27

那把行号设置成24时为什么无法显示呢

人造人 发表于 2018-6-28 19:56:00

Co27Ti22 发表于 2018-6-28 19:42
那把行号设置成24时为什么无法显示呢

截图,还有代码

Co27Ti22 发表于 2018-6-29 11:54:21

人造人 发表于 2018-6-28 19:56
截图,还有代码

抱歉,已经没有问题了

57158597@qq.com 发表于 2018-7-2 08:23:02

Co27Ti22 发表于 2018-6-29 11:54
抱歉,已经没有问题了

W都没显示出来{:5_94:}
页: [1]
查看完整版本: 关于显示字符串的问题