. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验9 欢迎交流  [待解决] 回复[ 5次 ]   点击[ 297次 ]  
benzhemin
[帖 主]   [ 发表时间:2012-12-28 13:18 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:2
注册日期:2011-09-18 20:07
assume cs:code

data segment
    db 'welcome to masm!'
data ends

color segment
    dw 00000010B ;绿色
    dw 00100100B ;绿底红色
    dw 01110001B ;白底蓝色
color ends

stack segment
    dw 8 dup(0)
stack ends

code segment
start:
    mov ax, color
    mov ds, ax
    
    mov ax, data
    mov es, ax
    
    mov ax, stack
    mov ss, ax
    mov sp, 10h
    
    push ds:[4]
    push ds:[2]
    push ds:[0]
    
    mov ax, 0B800H
    mov ds, ax
    
    mov bx, 780h ;第12行 dos默认为80×25,第12行为中间行
    
    mov cx, 3
display:
    pop dx
    push cx
    
    mov si, 40h  ;每次从第40h单元开始写字符,显示在中间 
    mov di, 0    ;di作为welcome字符串的偏移指针
   
    mov cx, 10h
perrow:
    mov al, es:[bp][di]
    mov [bx][si], al
    inc si
    inc di
    mov [bx][si], dl
    inc si
    
    loop perrow
    pop cx
    
    add bx, 0a0h  ;继续下一行
    loop display
    
    mov ax, 4c00h
    int 21h
code ends

end start
benzhemin
[第1楼]   [ 回复时间:2012-12-28 13:21 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:2
注册日期:2011-09-18 20:07
这是一年前我写的代码
http://www.asmedu.net/bbs/pasteinfo.jsp?part=1&level=book&kind=1010&qkSg=2&qID=63127&readSg=1
仅仅显示一行
benzhemin
[第2楼]   [ 回复时间:2012-12-28 13:57 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:2
注册日期:2011-09-18 20:07
这里对显示到中间的理解可能有点问题,又重新计算了一下
一共25行,中间行为12,13,14行,dos屏幕以第0开始记第一行
转为11,12,13为中间行
每行偏移为a0h, 11*10=110 110/16=6 余14 11行偏移为6E0h
计算第24行偏移 24*10=240 240/16=15 24行偏移为F00h, 与书上保持一致

以上代码应将 mov bx, 780h ;第12行 dos默认为80×25,第12行为中间行
修改为       mov bx, 6e0h ;第12行 dos默认为80×25,第12行为中间行
benzhemin
[第3楼]   [ 回复时间:2012-12-28 14:01 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:2
注册日期:2011-09-18 20:07
再粘贴一下修改的代码

assume cs:code

data segment
    db 'welcome to masm!'
data ends

color segment
    dw 00000010B ;绿色
    dw 00100100B ;绿底红色
    dw 01110001B ;白底蓝色
color ends

stack segment
    dw 8 dup(0)
stack ends

code segment
start:
    mov ax, color
    mov ds, ax
    
    mov ax, data
    mov es, ax
    
    mov ax, stack
    mov ss, ax
    mov sp, 10h
    
    push ds:[4]
    push ds:[2]
    push ds:[0]
    
    mov ax, 0B800H
    mov ds, ax
    
    mov bx, 6e0h ;第11行 dos默认为80×25,第11行为起始
    
    mov cx, 3
display:
    pop dx
    push cx
    
    mov si, 40h  ;每次从第40h单元开始写字符,显示在中间 
    mov di, 0    ;di作为welcome字符串的偏移指针
   
    mov cx, 10h
perrow:
    mov al, es:[bp][di]
    mov [bx][si], al
    inc si
    inc di
    mov [bx][si], dl
    inc si
    
    loop perrow
    pop cx
    
    add bx, 0a0h  ;继续下一行
    loop display
    
    mov ax, 4c00h
    int 21h
code ends

end start
benzhemin
[第4楼]   [ 回复时间:2012-12-28 14:02 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:2
注册日期:2011-09-18 20:07
欢迎大家讨论
walwj
[第5楼]   [ 回复时间:2012-12-28 20:39 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-12-03 17:03
assume cs:zhizhen
        shuju segment
        db 'welcome to masm!';02h,24h,71h
        shuju ends
        
        zhizhen segment
        kais:        mov ax,shuju                   
                        mov ds,ax
                        mov        ax,0b800h
                        mov es,ax
                        mov si,0
                        mov di,720H
                        
                        mov cx,16
                x:        mov al,ds:[si]                                                
                        mov word ptr es:[di],ax                                
                        mov word ptr es:[di+160],ax                        
                        mov ah,71H                                                        
                        mov word ptr es:[di+320],ax
                        inc si
                        add di,2
                        loop x
                        mov ax,4c00h
                        int 21h
                
                        zhizhen ends
                        end kais
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved