|
主题 : : 我的实验11源程序,欢迎指点 [待解决] |
回复[ 1次 ]
点击[ 446次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2010-03-11 16:14 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-12-27 17:13 |
assume cs:code
data segment
db "Beginner's All-purpose symbolic Instruction Code.",0
data ends
code segment
begin:mov ax,data
mov ds,ax
mov si,0
call letterc
mov ax,4c00h
int 21h
letterc:push ax
push si
push cx
k:mov al,[si]
cmp al,61h
jb s0
cmp al,7ah
ja s0
and al,11011111b
mov [si],al
inc si
jmp short k
s0:mov ch,0
mov cl,al
jcxz okret
inc si
jmp short k
okret:pop cx
pop si
pop ax
ret
code ends
end begin | | |
|
|
|
|
[第1楼]
[ 回复时间:2010-03-31 20:51 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-02-18 19:15 |
子程序可以不用寄存器AX,直接用CX,这样程序会简洁很多。
这是我的程序,把前面的显示字符串子程序用上了。
Assume cs:codesg
Datasg segment
Db "B eginner's All-purpose Symbolic Instruction Code.",0
Datasg ends
stacksg segment
db 64 dup (0)
stacksg ends
Codesg segment
Begin: mov ax,datasg
Mov ds,ax
Mov si,0
Call letterc
Mov dh,8
Mov dl,0
Mov cl,2
Call show_str
Mov ax,4c00h
Int 21h
Letterc:
Push si
Push cx
Sub cx,cx
Lp:
Mov cl,[si]
Jcxz s2
Cmp cl,97
Jb s1
Cmp cl, 122
Ja s1
Sub cl,20h ;或者 and cl, 11011111B
Mov [si],cl
S1: inc si
Jmp short lp
S2: pop cx
Pop si
ret
Show_str: ;参数:行号(dh);列号(dl);属性(cl);字符串首地址:ds:si
Push ax
Push bx
Push es
Mov al,160
Mul dh
Mov bx,ax ;计算行位置
Mov al,2
Mul dl
Add bx,ax ;在行位置上加上列位置
Mov ax,0b800h
Mov es,ax
Mov al,cl
S:
Mov ch,[si]
Mov cl,0
Jcxz ok1
Mov cl,al
Mov es:[bx],ch
Inc bx
Mov es:[bx],cl
Inc si
Inc bx
Jmp short s
OK1:
Pop es
Pop bx
Pop ax
Ret
Codesg ends
End begin | | |
|