|
主题 : : 10.1 10.2 10.3程序 结果倒是无差错,可是觉得调用起来不方便。不知道怎么改进10.2 10.3 [已解决] |
回复[ 5次 ]
点击[ 323次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2008-11-19 22:27 ]
[引用]
[回复]
[ top ] | |
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36 |
说明;显示一个以0结尾的字符窜
参数;ds:si指向字符串的首地址
结果:没有返回值
assume cs:code
data segment
db 'welcome to masm!',0
data ends
code segment
start: mov dh,8
mov dl,3
mov cl,2
mov ax,data
mov ds,ax
mov si,0
call display
mov ax,4c00h
int 21h
子程序使用的寄存器入栈
display:push ax
push bx
push cx
push ds
push es
push di
push si
mov ax,0b800h
mov es,ax
mov ax,data
mov ds,ax
mov bx,0
mov di,0
mov al,160
mul dh
mov bx,ax
mov al,2
mul dl
mov di,ax
用ax传送属性字符
mov ah,cl
circle: mov cl,[si]
sub ch,ch
jcxz ok
mov al,cl
mov es:[bx+di],ax
add di,2
inc si
jmp circle
子程序使用的寄存器出栈
ok: pop si
pop di
pop es
pop ds
pop cx
pop bx
pop ax
ret
code ends
end start | | |
|
|
|
|
[第1楼]
[ 回复时间:2008-11-19 23:04 ]
[引用]
[回复]
[ top ] | |
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36 |
说明:进行不产生溢出的除法运算,被除数为dword型,除数为word型,结果为dword型。
参数:(ax)=dword型数据的低16位
(dx)=dword型数据的高16位
(cx)=除数
返回:(dx)=结果的高16位
(ax)=结果的低16位
(cx)=余数
assume cs:code
code segment
start: mov ax,4240h
mov dx,0fh
mov cx,0ah
call divdw
mov ax,4c00h
int 21h
divdw: push ax
push bx
push cx
mov bx,ax
mov ax,dx
sub dx,dx
div cx
push ax
mov ax,bx
div cx
mov cx,dx
pop dx
pop cx
pop bx
pop ax
ret
code ends
end start | | |
|
|
|
|
[第2楼]
[ 回复时间:2008-11-19 23:14 ]
[引用]
[回复]
[ top ] | |
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36 |
功能:将word型数据转变为表示十进制数的字符串,字符串以0为结尾符。
参数:(ax)=word型数据
ds:si指向字符串的首地址
返回:无
assume cs:code
data segment
db 16 dup(0)
data ends
code segment
ks: mov ax,12666
mov bx,data
mov ds,bx
mov si,0
call dtoc
call show_wd
mov ax,4c00h
int 21h
dtoc: push sp
push bp
push ax
push cx
push dx
push si
mov bp,sp
fz: mov cx,ax
jcxz ok
sub dx,dx
mov cx,10
div cx
add dx,30h
push dx
jmp fz
ok: sub bp,sp
sub dx,dx
mov ax,bp
mov cx,2
div cx
mov cx,ax
xh: pop [di]
add di,1
loop xh
pop si
pop dx
pop cx
pop ax
pop bp
pop sp
ret
show_wd:mov dh,8
mov dl,3
mov cl,2
mov ax,0b800h
mov es,ax
mov di,0
mov bx,0
mov al,160
mul dh
mov bx,ax
mov al,2
mul dl
mov si,ax
mov ah,cl
xh1: mov cl,[di]
mov ch,0
jcxz ok1
mov al,cl
mov es:[bx+si],ax
inc di
add si,2
jmp xh1
ok1: ret
code ends
end ks | | |
|
|
|
|
[第3楼]
[ 回复时间:2008-11-19 23:19 ]
[引用]
[回复]
[ top ] | |
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36 |
明天再弄,呵呵。 都弄了半个月了,看了一下课程设计一。
才发现10.2,10.3还不够完善,好像就是所谓的扩展性差。实际调用起来,还要改子程序。
阿米豆腐! | | |
|
|
|
|
[第4楼]
[ 回复时间:2008-11-19 23:22 ]
[引用]
[回复]
[ top ] | |
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36 |
除法溢出的程序,我解决的办法就是看附注(没理解透彻),又用计算机看结果编出来的。搞了几天算是明白了点,算是得过且过吧!啊哈! | | |
|
|
|
|
[第5楼]
[ 回复时间:2008-11-20 23:06 ]
[引用]
[回复]
[ top ] | |
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36 |
此贴由 贴主 于 [ 2008-11-20 23:06 ] 结贴。 结贴原因:问题已解决 | | |
|