鱼C论坛

 找回密码
 立即注册
查看: 1916|回复: 1

[技术交流] 实验9

[复制链接]
发表于 2012-4-29 14:03:29 | 显示全部楼层 |阅读模式

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

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

x
assume cs:code,ds:data,ss:stack
data segment
db 'welcome to masm!'
db 21h,26h,74h
data ends

stack segment
dw 8 dup(0)
stack ends

code segment
start:  mov ax,data
                mov ds,ax
                mov ax,stack
                mov ss,ax
               
                xor bx,bx          ;bx清0,用来索引颜色
                mov ax,0b872h      ;屏幕中间现存的段地址,
               
                mov cx,3           ;外循环3次
        s3: push cx            ;三个入栈保存外循环相关寄存器的值
                push ax            ;以防止在内循环中他们的值被改变
                ;push bx
               
                mov es,ax         
                mov si,0           ;索引源数据,字符welcome to masm
                mov di,0           ;定位目标地址
                mov cx,16          ;内循环16次
        s1: mov al,ds:[si]
                mov ah,ds:10h[bx]
                mov es:[di],ax
                inc si
                add di,2
                loop s1
                inc  bx
                               
                pop ax
                add ax,0ah
               
                pop cx
                loop s3
               
                mov ax,4c00h
                int 21h
               
code ends
end start
               
把小甲鱼的程序优化了一下,分享分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-3 17:11:15 | 显示全部楼层
  1. ;=============================================================
  2. ;     实验九: 在屏幕中间显示3行不同前景,背景色的字符

  3. ;=============================================================

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

  5. datasg segment
  6.                 db 'welcome to masm!'                                ;显示的字符
  7.                 db 00000010b, 00100100b, 01110001b  ;颜色属性
  8. datasg ends

  9. stacksg segment
  10.                 db 8 dup(0)
  11. stacksg ends

  12. codesg segment

  13. start:
  14.                 mov ax, stacksg
  15.                 mov ss, ax
  16.                 mov sp, 8
  17.                 mov ax, datasg
  18.                 mov ds, ax
  19.                 mov ax, 0B872H                                                ;显示中间行中间列偏移地址
  20.                 mov es, ax
  21.                
  22.                 mov di, 0                                                        ;行偏移,每行 +160
  23.                 mov si, 0                                                        ;颜色属性字节偏移 ds:16[si]
  24.                
  25.                 mov cx, 3
  26.         S:                                                                                ;外循环,3次,一次为一行 di
  27.                 mov bx, 0                                                        ;字符字节偏移
  28.                
  29.                 push cx
  30.                
  31.                 mov cx, 16
  32.                 s0:                                                                        ;内循环,一次1字节字符(写入显示地址为2字节) bx
  33.                         mov al,                            [bx]
  34.                         push bx                                                        ;保存 bx,下面可用2*(bx) 来完成显示地址偏移
  35.                         add bx, bx
  36.                         mov es:[bx + di],         al
  37.                         mov al,                                 16[si]
  38.                         mov es:1[bx + di],         al
  39.                         pop bx
  40.                        
  41.                         inc bx
  42.                        
  43.                 loop s0
  44.                
  45.                 add di, 160
  46.                 inc si
  47.                
  48.                 pop cx
  49.        
  50.         loop S
  51.                
  52.                 mov ax, 4c00H
  53.                 int 21H
  54.        
  55. codesg        ends

  56. end start
复制代码
同分享,俺独立写的代码,才发现与小甲鱼的,还有网上参考答案出入比较大...但试验了一下,还是可以的...求优化...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-2 08:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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