. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  〖分享我的实验9〗已调试通过,另类定义法,嵌套循环,这个没有写注释,如果你能看懂证明你很很很用功在学  [待解决] 回复[ 6次 ]   点击[ 285次 ]  
assembly31
[帖 主]   [ 发表时间:2011-02-07 19:42 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-02-07 19:07
assume cs:c,ds:d

d segment

db 'w',2,'e',2,'l',2,'c',2,'o',2,'m',2,'e',2,' ',2,'t',2,'o',2,' ',2,'m',2,'a',2,'s',2,'m',2,'!',2
db 'w',24h,'e',24h,'l',24h,'c',24h,'o',24h,'m',24h,'e',24h,' ',24h,'t',24h,'o',24h,' ',24h,'m',24h,'a',24h,'s',24h,'m',24h,'!',24h
db 'w',71h,'e',71h,'l',71h,'c',71h,'o',71h,'m',71h,'e',71h,' ',71h,'t',71h,'o',71h,' ',71h,'m',71h,'a',71h,'s',71h,'m',71h,'!',71h

d ends

c segment

k:
mov ax,d
mov ds,ax

mov ax,0b800h
mov es,ax

mov bx,0
mov bp,0
add bp,80
dec bp
sub bp,15
mov cx,11

x0:
add bp,160
loop x0

mov cx,3

x2:
mov dx,cx
mov si,0
mov cx,16

x1:
mov ax,[bx]
mov es:[bp][si],ax

add bx,2
add si,2
loop x1

add bp,160
mov cx,dx
loop x2

mov ax,4c00h
int 21h

c ends

end k
zaixuexi
[第1楼]   [ 回复时间:2011-02-07 20:14 ]   [引用]   [回复]   [ top ] 
荣誉值:93
信誉值:0
注册日期:2010-11-29 14:28
很不错,呵呵,加油.
assembly31
[第2楼]   [ 回复时间:2011-02-07 21:38 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-02-07 19:07
呵呵 谢谢 希望大计共同进步 有更先进或更另类的方法 大家都晒出来看看啊
masmaster
[第3楼]   [ 回复时间:2011-02-07 23:42 ]   [引用]   [回复]   [ top ] 
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19
也可以把字符及属性以文本的形式给debug,也可以显示出来, 不过瞧那么的字符确实很累
asmcaicai
[第4楼]   [ 回复时间:2011-02-20 10:24 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2011-02-16 23:01
刚开始我也定义了好多字符,后来看到别人只定义了16个字符然后在循环里赋值,我也写成那样,就是计算每行每列花了许多时间。程序如下:

assume cs:code,ds:data

data segment

     db 'welcome to masm!'

data ends

code segment

start:mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax

mov si,0
mov di,0

mov cx,16

s:mov al,[si]
mov es:[720h+di],al
mov al,02h
mov es:[721h+di],al

mov al,[si]
mov es:[7c0h+di],al
mov al,24h
mov es:[7c1h+di],al

mov al,[si]
mov es:[860h+di],al
mov al,71h
mov es:[861h+di],al

inc si
add di,2
loop s

mov ax,4c00h
int 21h

code ends

end start

如有错误,大家指导一下
youguiqing
[第5楼]   [ 回复时间:2011-03-08 00:46 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:0
注册日期:2009-12-03 21:13
assume cs:code,ds:data,ss:stack 
data segment
db 'Welcome to masm!'
dw 02h,24h,71h       ;三种颜色的代码
data ends
stack segment
dw 8 dup(0)
stack ends
code segment
           start:mov ax,data    ;设置字符所在为ds段
                  mov ds,ax
                  mov ax,stack    ;设置载空间
                  mov ss,ax
                  mov sp,16
                  mov ax,0b800h   ;设置输出为ES段
                  mov es,ax
                  mov bp,1030 ;bp=80*12行+70=1030差不多在中间了
                  mov si,16   ;设置si为颜色所在内存地址
                  mov cx,3    ;显示3行所以设外层loop为3
            s1:mov di,0
               mov bx,0
               push cx        ;外层loop用来保存cx值          
                  mov cx,16
                s:push [bx]  ;把ds:0中的字显示到屏幕第12行中间
                  pop es:[bp+di] ;这里用di来每显一个字后向2字节
                  push [si]     ;把颜色输入
                  pop es:1[bp+di]
                  inc bx
                  add di,2   ;这里用di来每显一个字后向2字节
                  loop s
                  add si,2   ;换一种颜色
                  add bp,160 ;屏幕显示换一行
                  pop cx    ;取回外层loop的CX值
                  loop s1
                  mov ax,4c00h
                  int 21h
code ends
end start
a88510
[第6楼]   [ 回复时间:2011-03-18 11:42 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-01-26 21:21
如果是楼主这种方法,还不如用堆栈压进去比较好
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved