+ -
当前位置:首页 → 问答吧 → 汇编编程

汇编编程

时间:2011-06-21

来源:互联网

用汇编语言编写:“霓虹灯”方式显示字体 按下1键,从左至右霓虹灯显示hello;按下2键,从右至左霓虹灯显示hello;按下Esc键,结束程序。
很急,拜托了~~!!

作者: tianyaxiaozhuo   发布时间: 2011-06-21

大概写了一个,繁琐了点。楼主就将就点吧。 
Assembly code
;
;This Program Compiled Sucess by Masm 6.15
;
assume    cs:code,ds:data
data    segment
msg    db    'hello'
data    ends
code    segment
start:
    mov ax,data          ;定义数据段
    mov ds,ax
    mov ax,0b800h        ;定义附加段
    mov es,ax
    call show
s:    
    in al,60h            ;读取端口数据
    cmp al,2             ;如果是1
    jz z                 ;则从左向右闪动
    cmp al,3             ;如果是2
    jz y                 ;则从右向左闪动
    cmp al,1             ;如果是ESC
    jz done              ;结束程序
    jmp s
z:
    call left            ;调用左闪子程序
    call show            ;闪动完毕,固定
    jmp s
y:
    call right           ;调用 右闪子程序
    call show            ;闪动完毕,固定
    jmp s
done:
    mov ah,4ch           ;返回dos
    int 21h
;
show    proc
    mov si,offset msg
    mov di,160*12+40*2
    mov ah,00000001b
    mov cx,5
s0:
    mov al,[si]
    mov es:[di],ax
    inc si
    add di,2
    loop s0
    ret
show    endp
;
left    proc uses ax es si di
    mov si,offset msg
    mov di,160*12+40*2
    mov ah,10000001b
    mov cx,5
sL:
    mov al,[si]
    mov es:[di],ax
    inc si
    add di,2
    call delay
    loop sL
    ret
left    endp
;        
right    proc uses ax es si di
    mov si,offset msg+6
    mov di,offset 160*12+40*2+10
    mov ah,10000001b
    mov cx,5
sR:
    mov al,[si]
    mov es:[di],ax
    dec si
    sub di,2
    call delay
    loop sR
    ret
right    endp
;延迟子程序
delay    proc uses ax dx
    mov dx,10h
    mov ax,0
de:
    sub ax,1
    sbb dx,0
    cmp ax,0
    jne de
    cmp dx,0
    jne de
    ret
delay    endp
;
code    ends
end    start

作者: masmaster   发布时间: 2011-06-21

mov di,offset 160*12+40*2+10 这行错了, 应为: mov di,160*12+40*2+10

作者: masmaster   发布时间: 2011-06-21