we6540 发表于 2012-3-14 13:01:13

实验9

问什么我写出来的代码显示不出‘wlcome tomasm’?
求大神指点
assume cs:qq,ds:yy,ss:kk
yy segment
db 'wlcome to masm!.'
db 02h,24h,72h
yy endS

kk segment
db 16 dup (0)
kk ends

qq segment
start:
mov ax,yy
mov ds,ax
mov ax,kk
mov ss,ax
mov sp,16
MOV AX,0200h
mov es,ax

mov si,0       ;单词
mov di,17   ; 颜色
mov bx,0   ;换行
mov cx,3   ;
mov bp,0
s:
push cx
mov cx,16
s1:
mov al,ds:
mov es:,al
inc si
mov ah,ds:
mov es:,ah
inc si
inc bp
loop s1

add bx,32
mov si,0
inc di
MOV BP,0
pop cx

LOOP s

mov ax,4c00h
int 21
qq ends
end start

夏洛 发表于 2012-3-14 14:15:03

基本没错,细节上有问题,显示内存的段地址是B800,一行是160个字节
assume cs:qq,ds:yy,ss:kk

yy segment
    db 'welcome to masm!'
    db 02h,24h,72h
yy ends

kk segment
    db 16 dup (0)
kk ends

qq segment
    start: mov ax,yy
         mov ds,ax

         mov ax,kk
         mov ss,ax
         mov sp,16

         mov ax,0b800h
         mov es,ax

         mov si,0
         mov di,10h
         mov bx,12*160+36h*2
         mov cx,3
         mov bp,0
      s: push cx
         mov cx,16
       s1: mov al,ds:
         mov es:,al
         inc si
         mov ah,ds:
         mov es:,ah
         inc si
         inc bp
         loop s1

         add bx,160
         mov si,0
         inc di
         mov bp,0
         pop cx
         loop s

         mov ax,4c00h
         int 21h
qq ends
end start


︵ゞ痴.想 发表于 2012-3-14 14:48:07

本帖最后由 ︵ゞ痴.想 于 2012-3-14 19:08 编辑

编译过了可以正常显示出代码在下面。。。。

︵ゞ痴.想 发表于 2012-3-14 19:00:35

            ASSUME    CS:QQ,DS:YY,SS:KK
          YYSEGMENT
            DB      'welcome to masm!'    //这里你就打错了。。。
            DB      02H,24H,72H
          YYENDS

          KKSEGMENT
            DB      16 DUP (0)
          KKENDS

      QQSEGMENT
      START:
            MOV       AX,YY
            MOV       DS,AX
            MOV       AX,KK
            MOV       SS,AX
            MOV       SP,16
            MOV       AX,0B800H   //这个显存位置你也错了
            MOV       ES,AX

            MOV       SI,0      ;单词
            MOV       DI,16       ; 颜色
            MOV       BX,0      ;换行
            MOV       CX,3      ;
            MOV       BP,0
          S:
            PUSH      CX
            MOV       CX,16
         S1:
            MOV       AL,DS:
            MOV       ES:.1824,AL         //你没换行会出显在第一行
            INC       SI
            MOV       AH,DS:
            MOV       ES:,AH
            INC       SI
            INC       BP
            LOOP      S1

            add       SI,128
            INC       DI
            MOV       BP,0
            POP       CX

            LOOP      S

            MOV       AX,4C00H
            INT       21
      QQENDS
            END       START

请使用DOSbox 运行   不然会报错。。。 我也不知道是为什么。。。。

we6540 发表于 2012-3-14 20:08:21

夏洛 发表于 2012-3-14 14:15 static/image/common/back.gif
基本没错,细节上有问题,显示内存的段地址是B800,一行是160个字节

不知道为什么你的代码运行了几次后显示不了‘wlcome to masm!为什么呢

夏洛 发表于 2012-3-14 20:41:51

we6540 发表于 2012-3-14 20:08 static/image/common/back.gif
不知道为什么你的代码运行了几次后显示不了‘wlcome to masm!为什么呢

我的电脑可以正常显示,编译连接以后有什么提示么?还是编译连接后,运行不显示文字

夏洛 发表于 2012-3-14 20:43:05

程序还是自己打一遍,直接复制容易受影响
页: [1]
查看完整版本: 实验9