鱼C论坛

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

[汇编作业] 第9章那程序不难,别一下子就写一大堆,先显示一个字符再逐步深入

[复制链接]
发表于 2013-10-12 16:10:28 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 黑洞yyh 于 2013-10-12 16:21 编辑

编译链接完之后,用cmd去打开,直接双击是看不出效果的,在UE上运行也是看不到效果的

assume cs:codesg,ds:datasg,ss:stacksg
;定义一个数据段datasg segment                              
         db "Kawayi girl is my love!"              ;字符 0h[]               
         db 02h,24h,71h;                                ;颜色        10h[]        
datasg ends

stacksg segment
          dw 3 dup(0)                                     ;栈
stacksg ends

codesg segment
;合并了一下而已,整理了下,简洁了点,
;编写这个不难额,先从显示一个字符开始,
;之后到显示一行字符,最后就能知道怎么显示多行字符了!
start:
          mov ax,datasg                               ;数据段                        
          mov ds,ax                       
          mov ax,stacksg                              ;栈段                    
          mov ss,ax                       
          mov ax,0b872h                              ;显存地址                     
          mov sp,10h                                    ;栈底为10h处,入栈sp=sp-2
;=========================================================================        
          mov bx,0                                        ;字符索引                        
          mov di,0                                         ;颜色索引                        
          mov si,0                                         ;显存偏移
;=========================================================================   
          mov cx,3                                        ;大循环3次
s1:                                                                                
          push cx;                                        ;因为cx会被影响,所以先入栈,第一次cx为3                       
          push ax;                                        ;保存起始显存地址
;=========================================================================
          mov si,0                                        ;显存偏移清零,从下一行的起始地方开始                        
          mov bx,0                                       ;字符索引清零,表示从字符的第一个字符开始
;=========================================================================
          mov es,ax                                      ;定位显存地址
;=========================================================================
          mov cx,17h                                   ;16个字符,16次循环
s2:               
         mov al,ds:[bx]                                ;字符,因为是字节型所以要用al转存                        
         mov es:[si],al                                 ;显存位置                        
         inc si                        
         mov al,ds:17h[di]                          ;颜色 ,可以将10h[] ====c语言数组                        
         mov es:[si],al                                 ;显存位置                        
         inc bx;                                            ;索引下一个                        
         inc si;                                                                                          
         loop s2
;=========================================================================   
         pop ax;                                          ;ax出栈,顺要跟入栈相反                        
         pop cx                       
         add ax,0ah                                     ;指向下一行                        
         inc di;                                             ;颜色索引下一个                       
         loop s1;
;=========================================================================  
         ;程序返回cmd界面                        
         mov ax,4c00h                                               
         int 21h
;=========================================================================
codesg ends
end start



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-12 23:19:20 | 显示全部楼层
想要看出效果,在程序返回 dos 之前加入 jmp short start  即可

另,你那三行的显示位置不居中呀,检查一下吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-13 15:59:14 | 显示全部楼层

居中好像不重要吧,改下最前行的偏移就行啦,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-28 23:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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