鱼C论坛

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

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

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

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

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

x
第一版源码如下

  1. assume cs:code,ds:data

  2. data segment

  3.         db "welcome to masm!"                ;定义要显示的字符串
  4.         db 02h,24h,71h                                ;定义三种颜色属性

  5. data ends

  6. code segment

  7. start:
  8.                 mov ax,data
  9.                 mov ds,ax
  10.                
  11.                 mov ax,0b872h
  12.                 mov es,ax
  13.                 mov bx,0
  14.                 mov si,0
  15.                 mov cx,16
  16.                
  17.         x1:        mov al,[bx]
  18.                 mov es:[si],al
  19.                 mov es:[si+160],al
  20.                 mov es:[si+320],al
  21.                 inc bx
  22.                 add si,2
  23.                 loop x1                                ;循环字符
  24.                
  25.                 mov si,1
  26.                 mov cx,16
  27.                
  28.         x2:        mov al,[bx]
  29.                 mov es:[si],al
  30.                 mov al,[bx+1]
  31.                 mov es:[si+160],al
  32.                 mov al,[bx+2]
  33.                 mov es:[si+320],al
  34.                 add si,2
  35.                 loop x2                                ;循环属性
  36.                
  37.                 mov ax,4c00h
  38.                 int 21h
  39. code ends

  40. end start
复制代码


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

第二版源码如下

  1. assume cs:code,ds:data

  2. data segment

  3.         db "welcome to masm!"                ;定义要显示的字符串
  4.         db 02h,24h,71h                                ;定义三种颜色属性

  5. data ends

  6. code segment

  7. start:
  8.                 mov ax,data
  9.                 mov ds,ax
  10.                
  11.                 mov ax,0b872h
  12.                 mov es,ax
  13.                 mov bx,0
  14.                 mov si,0
  15.                 mov cx,16
  16.                
  17.         x1:        mov al,[bx]
  18.                 mov es:[si],al
  19.                 mov es:[si+160],al
  20.                 mov es:[si+320],al                                ;循环字符
  21.                
  22.                 mov ah,ds:[16]
  23.                 mov es:[si+1],ah
  24.                 mov ah,ds:[17]
  25.                 mov es:[si+161],ah
  26.                 mov ah,ds:[18]
  27.                 mov es:[si+321],ah                                ;循环属性

  28.                 inc bx
  29.                 add si,2
  30.                 loop x1
  31.                
  32.                 mov ax,4c00h
  33.                 int 21h
  34. code ends

  35. 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-4-18 12:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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