┈━═☆佳佑 发表于 2013-6-16 00:22:00

零基础入门汇编 第十章 实验10-1作业讨论

本帖最后由 ┈━═☆佳佑 于 2013-6-16 00:34 编辑

终于今天一天做了第一道题了   希望论坛的大侠给出意见能助小生更快 更正规的入门汇编
求语法排版等 小技巧等宝贵意见小生在此叩谢啦


assume cs:code
data segment
            db 'welcome to masm!'
            db 16 dup (0)                                  ;定义16字节 做显示字符串 扩展使用
            dw 25 dup (2)                                  ;定义25字   存放 25行显示偏移地址 由dh调用
   data ends

stack segment
            db 16 dup (0)
    stack ends


code segment
      start:mov    dh,2                                  ;显示行(0-24)
                  mov    dl,15                                 ;显示列(0-79)
                  mov    cl,113                               ;字符串颜色(1蓝 2绿 4 7黑底白字 66红底绿字 113白底蓝字)
   
                  mov    ax,data
                  mov    ds,ax
                  mov    si,0                                     ;ds:si =data段首地址
   
                  mov    ax,0b800h   
                  mov    es,ax
                  mov    di,0                                     ;显示段 第一页显示      
   
                   mov    ax,stack
                   mov    ss,ax
                   mov    sp,16                                 ;建立空栈 sp指向栈底
   
                  push    cx
                  mov   cx,25
         s:   mov   ax,di
                  mov   ds:,ax
               inc      si
               inc      si
               add      di,160
               loop   s                                       ;25行显示地址存入内存
               pop      cx
   
               call       show_str                            ; 标号 show_str =show string 显示字符串
                  mov   ax,0100h
                  int      21h


show_str:mov   si,0                                    ; 标号 show_str =show string 显示字符串
                   mov   bp,0
                   mov   ax,0
                   mov   bx,cx
            s0:   mov   bh,ds:
                   mov   cl,bh                                  ;取data段中要显示的字符
                   mov   ch,0
                                    
                   mov   ax,2                                     ;行(dh)=(ds:dh*2+20h)
                   mul      dh
                   mov   di,ax
                   mov   di,ds:                     ;取得行在data段的地址
                   mov   ax,2
                   mul   dl                                           ;列(dl)=(dl*2)
                   add   di,ax                                    ;算出列地址
                   mov    es:,bh                        ;显示字符串 所在行列
                   mov    es:,bl                     ;显示颜色
                   inc      si
                   inc      bp
                   inc      bp
                   jcxz   ok
                   loop    s0
   
   
             ok: ret
code ends
end start









页: [1]
查看完整版本: 零基础入门汇编 第十章 实验10-1作业讨论