鱼C论坛

 找回密码
 立即注册
查看: 4232|回复: 3

在屏幕第8行,3列

[复制链接]
发表于 2011-5-4 01:28:59 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 fishz 于 2011-5-5 12:32 编辑

王爽实验10,编写显示字符串子程序
(dh)=行号,取值范围0~24
(dl)=列号,取值范围0~79
(cl)=颜色,ds:si指向字符串的首地址
例子:在屏幕第8行,3列,用绿色显示data段中的字符串
  1. assume ds:data,  cs:code,  ss:stack

  2. data segment
  3.             db 'Welcome to masm!', 0        ;words
  4. color        db 02h, 24h, 71h                ;three colors
  5. data ends

  6. stack segment
  7.         dw 8 dup(0)
  8. stack ends

  9. code segment
  10. start:
  11.         mov ax, data
  12.         mov ds, ax
  13.        
  14.         mov ax, stack
  15.         mov ss, ax
  16.        
  17.         mov dh, 8
  18.         mov dl, 3
  19.         mov cl, 2
  20.         mov si, 0
  21.        
  22.         call show_str                   ;show_str函数
  23.        
  24.         mov ax, 4c00h
  25.         int 21h
  26.        
  27. show_str:
  28.         push bx
  29.         push si
  30.         push di
  31.         push es
  32.         push ax
  33.         push cx
  34.        
  35.         mov bl, cl                      ;bl记录颜色
  36.        
  37.         mov al, 0ah                    ;显存每一行的像素数量/10 本来是a0,作为段地址时要除于10
  38.         mov ah, 0
  39.         dec dh
  40.         mul dh                          ;第dh行
  41.        
  42.         ;mov dh, 2
  43.         ;mul dh                          ;????
  44.        
  45.         add ax, 0b800h                  ;显存初地址
  46.         ;dec dl
  47.         ;adc al, dl                      ;第dl列
  48.         ;adc ah, 0
  49.         mov es, ax                     ;显存段地址
  50.        
  51.         dec dl
  52.         mov al, dl
  53.         mov ah, 0
  54.         mov dl, 2
  55.         mul dl                          ;没列占两个字节的空间,因为还有颜色的内存
  56.         mov di, ax                      ;第dh行,第dl列
  57.        
  58. display:
  59.         mov cl, [si]
  60.         mov ch, 0
  61.         jcxz ok
  62.         mov al, ds:[si]
  63.         mov es:[di], al
  64.         inc di
  65.         ;pop cx                          ;pop颜色
  66.         mov es:[di], bl
  67.         inc si
  68.         inc di
  69.         jmp short display
  70.        
  71. ok:
  72.         pop cx
  73.         pop ax
  74.         pop es
  75.         pop di
  76.         pop si
  77.         pop bx
  78.        
  79.         ret
  80. code ends

  81. end start
复制代码
为什么我的是在对话框的第四行显示的???
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-5-4 22:36:15 | 显示全部楼层
呃..显示一个字符串而已,用汇编这么复杂呃.....
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-5-5 12:07:34 | 显示全部楼层
编译  测试 楼主的源码,我这里正常显示的。  你是在什么环境下调试的?
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-5-5 12:31:22 | 显示全部楼层
嗯,可能是运行环境的问题,之前我是在win7的debug下编译运行的。
现在我装了个VM虚拟机,在XP下运行就正确了。
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-4-20 00:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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