|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 ┈━═☆佳佑 于 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:[si+20H],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:[si]
mov cl,bh ;取data段中要显示的字符
mov ch,0
mov ax,2 ;行(dh)=(ds:dh*2+20h)
mul dh
mov di,ax
mov di,ds:[di+20H] ;取得行在data段的地址
mov ax,2
mul dl ;列(dl)=(dl*2)
add di,ax ;算出列地址
mov es:[bp+di],bh ;显示字符串 所在行列
mov es:[bp+di+1],bl ;显示颜色
inc si
inc bp
inc bp
jcxz ok
loop s0
ok: ret
code ends
end start
|
|