首页
社区
课程
招聘
[旧帖] [原创][原创][王爽汇编实验九]感谢 坐而论道! 0.00雪花
发表于: 2012-6-10 11:13 1438

[旧帖] [原创][原创][王爽汇编实验九]感谢 坐而论道! 0.00雪花

2012-6-10 11:13
1438
初学者往往基础知识不扎实,因此而遇到种种奇怪的错误,这种情况下,我通常就会到网上百度一下,可是,如果百度没有,我就悲催了o(╯□╰)o~~,那种感觉确实很让人不爽...
所以,再次感谢!
========================================下面是我原先的代码:===============================
    
assume ds:data,cs:code,ss:sta

data    segment
    db    'welcome to masm!'     ;用si定位
    db    2,36,113,122        ;用di定位
data     ends
sta        segment
    dw    0,0
sta        ends
code    segment
start:    mov ax,0b800h
        mov es,ax
        mov sp,4h
        mov bx,0h
        mov si,0h
        mov di,10h
        mov dx,0h
        mov cx,4h ;4行文字
    lie:    push cx
            mov cx,10h ;16列字符
        hang:    mov al,ds:[si]
                mov es:[bx+di],al
                mov ah,ds:[di]
                mov es:[bx+di+1],ah
            
                add dl,2h
                inc si
                loop hang
            pop cx
            mov bx,0a0h
            inc di
            loop lie
    
        mov ax,4c00h
        int 21h
code    ends

end    start

==================================下面是 坐而论道 为我改写之后的代码===========================
ASSUME  DS:DATA, CS:CODE, SS:STA
;*******************************************
DATA   SEGMENT
    DB   'Welcome to masm!'  ;共16个字符.
    DB   2, 36, 113, 122       
DATA   ENDS
;*******************************************
STA    SEGMENT
    DW  16 DUP (0)  ;原来的堆栈空间偏小.
STA    ENDS
;*******************************************
CODE   SEGMENT
START:
    MOV  AX, DATA    ;原来的,少了这两行.
    MOV  DS, AX

    MOV  AX, 0B800H
    MOV  ES, AX
    MOV  SP, 16            ;加大堆栈空间.

    MOV  BX, 12 * 160 + 26 * 2  ;第一次的显示位置:第12行、26列.

    MOV  DI, 16            ;颜色数据指针.
;----------------------------------------
    MOV  CX, 4H            ;准备显示4行文字.
HANG:
;-------------下面是显示一行.   
    MOV  SI, 0             ;设定字符数据指针.
    MOV  DX, 10H           ;每行16列字符.
LIE:
    MOV  AL, DS:[SI]       ;取出一个字符.
    MOV  ES:[BX], AL       ;写入显缓.
    MOV  AH, DS:[DI]       ;取出颜色字节.
    MOV  ES:[BX + 1], AH   ;写入显缓.

    ADD  BX, 2
    INC  SI
    DEC  DX
    JNZ  LIE
;--------------一行显示完成.

    ADD  BX, 160 - 32  ;加160,是转下一行,32,是刚才已经写入了.

    INC  DI       ;换成下一种颜色.

    LOOP HANG
;----------------------------------------
    MOV  AX, 4C00H
    INT  21H
CODE   ENDS
;*******************************************
    END  START

-----------------最后吸取教训----------------------------------------------------------------------------------------------
assume ds:data,cs:code,ss:stack

data segment
 db 'welcome to masm!'  ;用si定位
 db 2,36,113,122  ;用di定位
data  ends
stack segment stack
 dw 0,0,0,0,0,0,0,0
stack ends

code segment
;==================初始化==========================================
start: mov ax,0b800h
  mov es,ax
  mov ax,data
  mov ds,ax
  mov ax,stack
  mov ss,ax
  mov sp,16

  mov ax,0h
  mov si,0h    ;为数据区字符索引
  mov di,10h    ;为数据区属性索引
  mov bx,0c0h    ;显存行索引+列索引
  mov cx,4h    ;
;==================初始化结束=======================================
;==================循环4行==========================================
  lie: push cx
    mov cx,10h   ;每一行16个字符
    mov si,0h   ;每一次打印完成一行之后,索引回到行首
  
    hang: mov al,ds:[si]  ;取字符
      mov es:[bx],al  ;字符装入显存
      mov ah,ds:[di]  ;取属性
      mov es:[bx+1],ah ;属性装入显存
      
      inc si   
      add bx,2
      loop hang
  
    pop cx
    inc di
    add bx,0a0h   ;bx为行索引,此行代码为换行
    sub bx,20h   ;换行后回到行首列(相对来说,不是绝对行首)
    loop lie
;==================循环4行结束=======================================
  mov ax,4c00h
  int 21h
code ends
end start

=======================================经验总结================================
1.代码没有进行合理注释(⊙﹏⊙b汗  低级问题 挺懒~~)
2.22行和24行代码出错,dx寄存器用法不正确(⊙﹏⊙b汗 低级错误 不过 平时注意不到~~)
3.审题是没有合理分配寄存器进行定位(⊙﹏⊙b汗 以后编程好像也是个问题~~)
4.代码模块不是很分明 显得很乱~~(⊙﹏⊙b汗 没办法 习惯了~~)

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 48
活跃值: (462)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
处女贴,什么都不会用,格式也不正确,不过这不重要,重要的是想跟学习汇编的童鞋们分享心得
2012-6-10 11:18
0
雪    币: 88
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
汇编对我来说一直是个逾越不了的坎,蛋疼
2012-6-11 09:44
0
雪    币: 48
活跃值: (462)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不会汇编 那你怎么还在看雪混得这么好啊 推荐你先看一些简单的视频,www.fishc.com里面的,别说我做广告啊,我就是这样学的 感觉还算可以 ,就是里面讲的太浅了,入门不错
2012-6-11 09:56
0
雪    币: 88
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
楼上的,你哪只眼看出了我混的好?晕死了

我来看雪是报着一颗向你学习的心态来得,呵呵……

谢谢你给我推荐的入门方法,我这就开始学习。
2012-6-11 10:57
0
游客
登录 | 注册 方可回帖
返回
//