鱼C论坛

 找回密码
 立即注册
查看: 2475|回复: 2

[汇编作业] 实验九遇到的问题,有哪位童鞋帮忙解惑?

[复制链接]
发表于 2018-7-11 14:00:39 | 显示全部楼层 |阅读模式

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

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

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 bx,0
                mov si,0
                mov cx,16
                
        x1:        mov al,[bx]
                mov es:[si],al
                mov es:[si+160],al
                mov es:[si+320],al
                inc bx
                add si,2
                loop x1                                ;循环字符
                
                mov si,1
                mov cx,16
                
        x2:        mov al,[bx]
                mov es:[si],al
                mov al,[bx+1]
                mov es:[si+160],al
                mov al,[bx+2]
                mov es:[si+320],al
                add si,2
                loop x2                                ;循环属性
                
                mov ax,4c00h
                int 21h
code ends

end start

单步调试如图,首字母w没有显示出来,而且没有颜色。可能是因为后面的属性循环还没有执行的原因。
shiyan90.png

第二版源码如下
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 bx,0
                mov si,0
                mov cx,16
                
        x1:        mov al,[bx]
                mov es:[si],al
                mov es:[si+160],al
                mov es:[si+320],al                                ;循环字符
                
                mov ah,ds:[16]
                mov es:[si+1],ah
                mov ah,ds:[17]
                mov es:[si+161],ah
                mov ah,ds:[18]
                mov es:[si+321],ah                                ;循环属性

                inc bx
                add si,2
                loop x1
                
                mov ax,4c00h
                int 21h
code ends

end start

单步调试如图,颜色已经有了,但是首字母w还是没有显示出来。这是什么原因?
shiyan91.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-2-20 21:51:41 | 显示全部楼层
本帖最后由 rouer39 于 2019-2-20 22:17 编辑

第一版源码,修改后如下
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 bx,0    ;定位数据段
        mov si,0    ;定位目标列索引
        mov cx,10H
               
x1: mov al,[bx]
        mov es:[si],al
        mov es:[si].0A0H,al
        mov es:[si].0A0H.0A0H,al
        inc bx
        add si,2
        loop x1                                ;循环字符
   
        mov bx,0                             ;把bx归0,如果不归0的话也可以,下面的[bx].16,[bx].17,[bx].18改成[bx],[bx].1,[bx].2 因为它从第一个循环下来的时候bx已经为16
        mov si,1                             ;定位奇数
        mov cx,10H
               
x2: mov ah,[bx].16             ;[bx]为 ds:0 起始  02h在ds:[bx].16
        mov es:[si],ah
        mov ah,[bx].17
        mov es:[si].0A0H,ah
        mov ah,[bx].18
        mov es:[si].0A0H.0A0H,ah
        add si,2
        loop x2                                ;循环属性
               
        mov ax,4c00h
        int 21h
code ends

end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-20 22:25:49 | 显示全部楼层
第二版修改后如下:
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 bx,0
        mov si,0
        mov cx,16
               
        x1:mov al,[bx]
                   mov ah,ds:[16]
                   mov es:[si],ax
                  
                   mov ah,ds:[17]
                   mov es:[si].160,ax
                  
                   mov ah,ds:[18]
                   mov es:[si].320,ax
                  
                   inc bx
                   add si,2
                   loop x1
                  
                   mov ah,4ch
                   int 21h
code ends

end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 09:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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