. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  第九章,实验9 根据材料编程,大家探讨  [待解决] 回复[ 6次 ]   点击[ 563次 ]  
vs9841
[帖 主]   [ 发表时间:2009-08-17 21:53 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-01-17 12:29
要求将welecome to masm!显示到屏幕中间。分别用绿色,绿底红色,白底蓝色
下面是我做的,大家分析看看有什么不对的地方:
assume cs:codesg,ds:datasg
datasg segment
       db 'welcome to masm!'
datasg ends

codesg segment
    begin:mov ax,datasg
          mov ds,ax
          mov si,0
          mov di,0
          mov cx,10H
          mov ax,0B800H
          mov es,ax
        s:mov dl,ds:[si]           ;把welcome to masm!字串逐一传入dx低地址中,dx高地址中进行字符属性定义
          mov dh,02H               ;绿色字
          mov es:40H[di+0640H],dx  ;40H是把welcome to masm显示到中间列,0640H表示第11行。
          mov dh,24H               ;绿底红字
          mov es:40H[di+06E0H],dx  ;第n行首地址为=(n-1)*A0H,(n为16进制)
          mov dh,71H               ;白底蓝字
          mov es:40H[di+0780H],dx  ;第13行首地址为(D-1)*A0H=780H
          inc si
          add di,2                 
          loop s
          
          mov ah,1
          int 21h
          mov ax,4c00h
          int 21h
codesg ends
end begin
mywiil
[第1楼]   [ 回复时间:2009-08-19 14:39 ]   [引用]   [回复]   [ top ] 
荣誉值:61
信誉值:4
注册日期:2008-10-14 16:29
没什么问题。
我觉得能够理解并完成任务就行了。每个人的思路都可能有差别。
thedaydreamwang
[第2楼]   [ 回复时间:2010-01-11 06:45 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-10-07 14:18
assume cs:code,ds:data
  data segment
   db 'welcome to masm'
   data ends
  code segment
            start:  mov ax,data
                      mov ds,ax
                       mov ax,0
                        mov di,ax
                      mov ax,0b800h
                      mov es,ax
                      mov bx,0
                       mov ax,0ca00h
                       mov cx,32
                s:   mov es:[bx+1] ,ah
                     mov al,ds:[si+0]
                     mov es:[bx], al
                      add bx,2
                       add si,1
                     loop s
                     mov ax,4c00h
                     int 21h
    code ends
    end start
sysnap
[第3楼]   [ 回复时间:2010-01-12 18:52 ]   [引用]   [回复]   [ top ] 
荣誉值:32
信誉值:0
注册日期:2008-01-15 12:22
颜色也是一种数据,从程序的逻辑和可扩展考虑,最好把颜色数据定义到数据点去。
thedaydreamwang
[第4楼]   [ 回复时间:2010-01-13 01:38 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-10-07 14:18
呵呵我是新手可能我这样写是不好的习惯!!谢谢指正不好的一面!!
thedaydreamwang
[第5楼]   [ 回复时间:2010-01-26 02:47 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-10-07 14:18
经过一晚上的努务终与完成了呵呵真不容易发现自已的错误大家都来恭喜我吧代码始下

assume cs:code 
data segment 
     db 'welcome to masm!',0 
data ends 
 code segment
start: mov ax,data
                  mov ss,ax 
                  mov sp,200h
                  mov dh,8 
                  mov dl,3 
                   mov cl,2 
                   mov ds,ax 
                   mov si,0 
                   call show_str 
                   mov ax,4c00h 
                    int 21h 
           show_str:     dec dh 
                             dec dl 
                              mov ax,0 
                              mov al,dh 
                              mov bx,0 
                              mov bl,10 
                              mul bl 
                              mov bx,ax 
                               mov ax,0b800h 
                               add ax,bx 
                                mov es,ax 
                               mov ax,0 
                               mov  al,dl 
                               add al,dl 
                               mov bx,ax 
                               mov di,0 
                               mov  ch,cl  
                  ok:        mov cl,[si] 
                                push cx 
                                 mov ch,0 
                                  jcxz return 
                                  pop cx
                                   mov es:[bx+di],cx
                                  add di,2 
                                  inc si 
                                  jmp short ok 
                    return:   pop cx
                                 ret
  code ends 
  end start
ddup
[第6楼]   [ 回复时间:2010-03-31 14:15 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-03-27 09:11
刚开始设字符显示段地址为ES:0B87Bh,只定位到第9行,但照每行160字节算,应该是第13行呀,这好像说明了每行不是160字节;后来加了640个字节改为0B8a3h,显示字符原样移到了第13行(即列没变),这有好像说明了每行是160字节呀。这是为什么呢?
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved