鱼C论坛

 找回密码
 立即注册
查看: 4454|回复: 6

[已解决]王爽 汇编语言 实验九 求助

[复制链接]
发表于 2021-9-25 16:10:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求各位大佬帮忙看看我这样做为什么显示不对
assume cs:code,ds:data 

data segment
        db 'welcome to masm!'        
        db 02h,24h,71h
data ends

code segment

start:        
        mov ax,data
        mov ds,ax

        mov ax,0b872h
        mov es,ax

        mov si,0
        mov bx,0
        mov cx,16
        
        s: 
        mov ah,0
        mov al,[bx]
        mov es:[si],al
        
        inc bx
        inc si
        inc si
        loop s
        
        mov si,0
        mov bx,0
        mov cx,16

        s0:
        mov ah,0
        mov al,[16]
        mov es:[bx+1],al
        inc bx
        inc bx
        loop s0
        
        mov bx,0
        mov cx,16

        s1:
        mov ah,0
        mov al,[17]
        mov es:[bx+1],al
        inc bx
        inc bx
        loop s1
        
        mov bx,0
        mov cx,16

        s2:
        mov ah,0
        mov al,[18]
        mov es:[bx+1],al
        inc bx
        inc bx
        loop s2
        
        mov ax,4c00h
        int 21h
        
code ends
end start

最佳答案
2021-9-25 16:36:42
assume cs:code,ds:data

data segment  
    db 'welcome to masm!'
    db 02h,24h,71h
data ends

code segment
start:
    mov ax, data
    mov ds, ax

    mov ax, 0b872h
    mov es, ax

    mov di, 0
    mov bx, 0
    mov cx, 16

    ; 第一行
    s0:
    mov al, ds:[bx]
    mov ah, ds:[16]
    mov es:[di], ax
    add di, 2
    inc bx
    loop s0

    mov di, 0
    mov bx, 0
    mov cx, 16
    ;第二行
    s1:
    mov al, ds:[bx]
    mov ah, ds:[17]
    mov es:160[di], ax ; 这里换行
    add di, 2
    inc bx
    loop s1

    mov di, 0
    mov bx, 0
    mov cx, 16
    ;第三行
    s2:
    mov al, ds:[bx]
    mov ah, ds:[18]
    mov es:320[di], ax ; 这里换行
    add di, 2
    inc bx
    loop s2

    mov ax, 4c00h
    int 21h
code ends
end start  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-9-25 16:12:33 | 显示全部楼层
发不了图片,就是在dos下运行后,我的屏幕中间只显示了一行蓝色背景绿色字体
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-25 16:24:07 | 显示全部楼层
兄弟,你这个没有换行啊,一直在同一行输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-25 16:36:42 | 显示全部楼层    本楼为最佳答案   
assume cs:code,ds:data

data segment  
    db 'welcome to masm!'
    db 02h,24h,71h
data ends

code segment
start:
    mov ax, data
    mov ds, ax

    mov ax, 0b872h
    mov es, ax

    mov di, 0
    mov bx, 0
    mov cx, 16

    ; 第一行
    s0:
    mov al, ds:[bx]
    mov ah, ds:[16]
    mov es:[di], ax
    add di, 2
    inc bx
    loop s0

    mov di, 0
    mov bx, 0
    mov cx, 16
    ;第二行
    s1:
    mov al, ds:[bx]
    mov ah, ds:[17]
    mov es:160[di], ax ; 这里换行
    add di, 2
    inc bx
    loop s1

    mov di, 0
    mov bx, 0
    mov cx, 16
    ;第三行
    s2:
    mov al, ds:[bx]
    mov ah, ds:[18]
    mov es:320[di], ax ; 这里换行
    add di, 2
    inc bx
    loop s2

    mov ax, 4c00h
    int 21h
code ends
end start  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-25 17:16:35 | 显示全部楼层
本帖最后由 tstyle 于 2021-9-25 17:19 编辑
JingHe1997 发表于 2021-9-25 16:24
兄弟,你这个没有换行啊,一直在同一行输出


谢谢兄弟回复! 其实我当时也是三行输出的,但是我理解错了就写成在一行输出。可是我原来的代码也不行,可以帮我看看我这样写为什么输出不对吗?谢谢!

代码如下:
assume cs:code,ds:data 

data segment
        db 'welcome to masm!'        
        db 02h,24h,71h
data ends

code segment

start:        
        mov ax,data
        mov ds,ax

        mov ax,0b872h
        mov es,ax

        mov si,0
        mov bx,0
        mov cx,16
        
        s:                           ; s循环在偶数位输入字符
        mov al,[bx]
        mov es:680h[si],al
        mov es:720h[si],al
        mov es:7c0h[si],al
        inc bx
        add si,2
        loop s
        
        mov si,0
        mov bx,0
        mov cx,16

        s0:                                 ;奇数位输入颜色
        mov al,[16]
        mov es:681h[bx],al          ;第一行
        add bx,2
        loop s0
        
        mov bx,0
        mov cx,16

        s1:
        mov al,[17]
        mov es:721h[bx],al          ;第二行
        add bx,2
        loop s1
        
        mov bx,0
        mov cx,16

        s2:
        mov al,[18]
        mov es:7c1h[bx],al          ;第三行
        add bx,2
        loop s2
        
        mov ax,4c00h
        int 21h
        
code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-25 17:59:28 | 显示全部楼层
[16] 、[17]、[18] 前面加上ds就可以了。当你用具体值表示偏移地址时,前面得加上段寄存器,不然编译器不知道你想表达啥
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-25 18:18:35 | 显示全部楼层
JingHe1997 发表于 2021-9-25 17:59
[16] 、[17]、[18] 前面加上ds就可以了。当你用具体值表示偏移地址时,前面得加上段寄存器,不然编译器不知 ...

谢谢兄弟,已经解决了。忘了这点了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 05:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表