. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  试验九终于独立完成,请大家评审!  [待解决] 回复[ 10次 ]   点击[ 366次 ]  
jiych
[帖 主]   [ 发表时间:2010-07-21 23:56 ]   [引用]   [回复]   [ top ] 
荣誉值:15
信誉值:0
注册日期:2010-06-02 22:04
代码:
;b800:780H----------b800:81FH
assume cs:codesg
data segment
        db 'welcome to masm!'
data ends
codesg segment
;0000
send:
        mov ah, 4cH
        int 21H
;0004
sgreen:                        ;green
        nop
        nop
        mov bp, offset sgreen
        mov si, bp
        mov di, offset ssgreen
        mov ax, cs:[di]
        mov cs:[si], ax
        mov ah, 02H
        jmp s0
        ;nop
;0019
ssgreen:
        jmp send
;001b
sgr:                        ;green background red
        nop
        nop

        mov bp, offset sgr 
        mov si, bp
        mov di, offset ssgr
        mov ax, cs:[di]
        mov cs:[si], ax
        mov ah, 24H
        jmp s0
        ;nop===
;0030
ssgr:
        jmp sgr
;0032
swb:                        ;white background black
        nop
        nop
        nop
        nop
;0036
        mov bp, offset swb 
        mov si, bp
        mov di, offset sswb
        mov ax, cs:[di]
        mov cs:[si], ax
        mov ah, 70H
        jmp s0
        ;nop===
;0049
sswb:
        jmp swb ;25 bytes

;004b
s0:
        mov bx, data
        mov es, bx
        mov bx, 0b800H
        mov ds, bx
        mov bx, 780H
        mov cx, 16
        mov si, 0
;005e
s:
        mov al, es:[si]
        mov [bx], ax
        inc si
        add bx, 2
loop s
;0069
        jmp bp
codesg ends
end swb
masmaster
[第1楼]   [ 回复时间:2010-07-22 12:48 ]   [引用]   [回复]   [ top ] 
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19
good,^_^
jiych
[第2楼]   [ 回复时间:2010-07-22 22:53 ]   [引用]   [回复]   [ top ] 
荣誉值:15
信誉值:0
注册日期:2010-06-02 22:04
谢谢鼓励,今天发现我忽然发现我的实现好龟毛噢,经过改动变成下面模样了:
;b800:780H----------b800:81FH
assume cs:codesg
data segment
        db 'welcome to masm!'
data ends
codesg segment
;0000
send:
        mov ah, 4cH
        int 21H
;0004
sgreen:                        ;green
        mov bp, offset send
        mov ah, 02H
        jmp s0
        ;nop
;000C
sgr:                        ;green background red
        mov bp, offset sgreen
        mov ah, 24H
        jmp s0
        ;nop===
;0014
swb:                        ;white background black
        mov bp, offset sgr 
        mov ah, 70H
        jmp s0
        ;nop===
;001C
s0:
        mov bx, data
        mov es, bx
        mov bx, 0b800H
        mov ds, bx
        mov bx, 780H
        mov cx, 16
        mov si, 0
;002F
s:
        mov al, es:[si]
        mov [bx], ax
        inc si
        add bx, 2
loop s
;003A
        jmp bp
codesg ends
end swb
jiych
[第3楼]   [ 回复时间:2010-07-22 22:54 ]   [引用]   [回复]   [ top ] 
荣誉值:15
信誉值:0
注册日期:2010-06-02 22:04
可能主要是受实验8的影响了哈哈
jiych
[第4楼]   [ 回复时间:2010-07-22 23:22 ]   [引用]   [回复]   [ top ] 
荣誉值:15
信誉值:0
注册日期:2010-06-02 22:04
晕 看坛子里的帖子 怎么好像重点在计算屏幕的中间位置了 和我想的不同呀
masmaster
[第5楼]   [ 回复时间:2010-07-23 10:03 ]   [引用]   [回复]   [ top ] 
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19
晕 看坛子里的帖子 怎么好像重点在计算屏幕的中间位置了 和我想的不同呀
------------------
回复:知道了0B800区域结构原理 ,写起屏来,游刃有馀。
towersimper
[第6楼]   [ 回复时间:2010-07-23 14:43 ]   [引用]   [回复]   [ top ] 
荣誉值:9
信誉值:3
注册日期:2008-06-12 09:16
由于字符串数据长16字节,每个字符其对应的ascii码和字符属性在显示缓冲区中各占一个字节,故共占32个字节,远小于一页总共能显示的4000个字节,故在此只需选择第0页来显示所需显示的字符串。在第0页中,共25行,每行80个字符,由于每个字符对应的在显示缓冲区各占一个字节,故每行共160个字节。要显示的字符串在显示缓冲区分别以3种不同的颜色属性显示,那就需3行来显示,即分别位于第11,12,13行,且题目中要求显示的字符串位于屏幕中央,即位于上述三行中每行的64~95字节处。在本程序中,上述三行的段地址用es表示,由题可知(es)=0B800h,第十一行开始处的偏移地址为第0行开始处的偏移地址加上中间11行的长度,即0000h+11*160=06E0h,用bx表示。另外字符串位于每行的64~95字节处,则第64字节离每行起始处的距离为40h,由于每个字符串从第64字节处占2个字节,因此用变量di每次循环加2,共循环16次,遍历这段存储空间。另外这三行中每行字符串对应位置相差160个字节,因此把(bx)+160就会切换到下一行。可知外循环为3次循环,在每行之间切换,内循环为16次循环,在每行中,将要显示的字符串中的每个字符的ascii码和对应的颜色属性分别传送到显示缓冲区中的第11,12,13行中的64~95字节处。
jiych
[第7楼]   [ 回复时间:2010-07-23 20:41 ]   [引用]   [回复]   [ top ] 
荣誉值:15
信誉值:0
注册日期:2010-06-02 22:04
晕 看坛子里的帖子 怎么好像重点在计算屏幕的中间位置了 和我想的不同呀
------------------
回复:知道了0B800区域结构原理 ,写起屏来,游刃有馀。
------------------
回复:
哈哈 masmaster说话总是短小精炼
jiych
[第8楼]   [ 回复时间:2010-07-23 20:42 ]   [引用]   [回复]   [ top ] 
荣誉值:15
信誉值:0
注册日期:2010-06-02 22:04
谢谢6楼老大的这么耐心,受益了
masmaster
[第9楼]   [ 回复时间:2010-07-23 21:32 ]   [引用]   [回复]   [ top ] 
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19
谢谢6楼老大的这么耐心,受益了
------------------
回复:呵呵, 不大会说话。
j03106
[第10楼]   [ 回复时间:2010-08-15 11:10 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-01-13 23:10
似乎好复杂啊!!
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved