- [crazyman] 以前还真没注意,看来光图嘴痛快是不行了。 01/18 15:48
- [black] 爱让我们变强 05/24 10:19
- [mouse] “救一个人,就等于救了全世界。”这是电影《辛德勒的名单》中的一句台词。 05/21 09:49
- [black] 不抛弃,也不放弃 05/20 12:41
- [li4096255] 你太幸运了. 我"跟"你了. 不要都不行. 04/28 09:44
- [hxqt12] 我只背的下来第一行。 03/06 14:40
- [startasm] 想致富先修路,呵呵 科技! 02/19 11:47
- [startasm] 先不说国内打假球还是国外打假球,也不说是否表现的太假了。首先打假球就违背了体育运动的宗旨,中国举办奥 02/16 10:58
- [starrynight] 中国球员的水平打假球都打得如此显山露水 我很郁闷 02/15 20:03
- [mouse] 早用上了,还不错:-) 01/20 20:27
- [startasm] 相互携手;-) 12/24 11:01
- [gocker] 我来给你留第一次言吧 希望大家加个好友,交个朋友! 共同学习进步!! 12/21 10:06
[2008-01-15 14:25] 10-3
数值显示
问题:编程,将data段中的数据以十进制的形式显示出来。
子程序描述:
名称:dtoc
功能:将word型数据转变为表示十进制的字符串,字符串以0为结尾符。
参数:(ax) = word 型数据
ds:si指向字符串的首地址
返回:无
assume cs:code
data segment
db 10 dup(0)
data ends
stack segment
db 16 dup(0)
stack ends
code segment
start:
mov ax,12666
mov bx,data
mov ds,bx
mov bx,stack
mov ss,bx
mov sp,16;栈存放计算后的数字
mov si,0
call dtoc
mov dh,8
mov dl,3
mov cl,2
call show_str
mov ax,4c00h
int 21h
;数值显示---------------
dtoc:
push ax
push bx
push cx
push dx
push si
push di
mov si,0
s1:
mov bx,10
mov dx,0
div bx
add dx,30h
;mov [si],dx
push dx
add si,1 ;结果的数字个数
mov cx,ax
jcxz ok
jmp s1
ok:
mov di,0 ;指向ds
mov cx,si ;数字个数
s2:
pop ax
mov [di],al ;存到ds段内,用于调用显示子程序显示
inc di
loop s2
pop di
pop si
pop dx
pop cx
pop bx
pop ax
ret
;---------显示字符串---------
;子程序描述:
;名称:show_str
;功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串。
;参数:(dh)=行号(取值范围0~24),(dl)=列号(取值范围0~79),(cl)=颜色,ds:si指向字符串的首地址。
;返回:无
show_str:
push ax
push bx
push cx
push si ;指向字符串变量
mov ax,0b800h
mov es,ax ;定义显存段起始段地址
mov al,160
mul dh
mov bx,ax
mov al,2
mul dl
add bx,ax ;存放显存起始地址
mov al,cl ;将颜色属性暂存al中
show_str_loop:
mov ch,0
mov cl,[si]
jcxz show_str_ret ;判断字符为0时结束
mov ch,al
mov es:[bx],cx
add si,1
add bx,2
jmp show_str_loop
show_str_ret:
pop si
pop cx
pop bx
pop ax
ret ;返回主程序
;-----------------------
;名称:Divdw
;功能:进行不会产生溢出的除法运算,被除数为dword型,除数为word型,结果为dword型。
;参数:(ax)=dword型数据的低16位
; (dx)=dword型数据的高16位
; (cx)=除数
;返回:(ax)=结果的低16位
; (dx)=结果的高16位
; (cx)=余数
divdw:
push si
push di
mov di,ax ;将低16位ax暂存于bx
mov ax,dx ;将高16位进行除法运算
mov dx,0
div cx
mov si,ax ;将int(H/N)暂存于si
mov ax,di
mov cx,dx ;将最终余数给cx
mov dx,si
pop di
pop si
ret
code ends
end start
问题:编程,将data段中的数据以十进制的形式显示出来。
子程序描述:
名称:dtoc
功能:将word型数据转变为表示十进制的字符串,字符串以0为结尾符。
参数:(ax) = word 型数据
ds:si指向字符串的首地址
返回:无
assume cs:code
data segment
db 10 dup(0)
data ends
stack segment
db 16 dup(0)
stack ends
code segment
start:
mov ax,12666
mov bx,data
mov ds,bx
mov bx,stack
mov ss,bx
mov sp,16;栈存放计算后的数字
mov si,0
call dtoc
mov dh,8
mov dl,3
mov cl,2
call show_str
mov ax,4c00h
int 21h
;数值显示---------------
dtoc:
push ax
push bx
push cx
push dx
push si
push di
mov si,0
s1:
mov bx,10
mov dx,0
div bx
add dx,30h
;mov [si],dx
push dx
add si,1 ;结果的数字个数
mov cx,ax
jcxz ok
jmp s1
ok:
mov di,0 ;指向ds
mov cx,si ;数字个数
s2:
pop ax
mov [di],al ;存到ds段内,用于调用显示子程序显示
inc di
loop s2
pop di
pop si
pop dx
pop cx
pop bx
pop ax
ret
;---------显示字符串---------
;子程序描述:
;名称:show_str
;功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串。
;参数:(dh)=行号(取值范围0~24),(dl)=列号(取值范围0~79),(cl)=颜色,ds:si指向字符串的首地址。
;返回:无
show_str:
push ax
push bx
push cx
push si ;指向字符串变量
mov ax,0b800h
mov es,ax ;定义显存段起始段地址
mov al,160
mul dh
mov bx,ax
mov al,2
mul dl
add bx,ax ;存放显存起始地址
mov al,cl ;将颜色属性暂存al中
show_str_loop:
mov ch,0
mov cl,[si]
jcxz show_str_ret ;判断字符为0时结束
mov ch,al
mov es:[bx],cx
add si,1
add bx,2
jmp show_str_loop
show_str_ret:
pop si
pop cx
pop bx
pop ax
ret ;返回主程序
;-----------------------
;名称:Divdw
;功能:进行不会产生溢出的除法运算,被除数为dword型,除数为word型,结果为dword型。
;参数:(ax)=dword型数据的低16位
; (dx)=dword型数据的高16位
; (cx)=除数
;返回:(ax)=结果的低16位
; (dx)=结果的高16位
; (cx)=余数
divdw:
push si
push di
mov di,ax ;将低16位ax暂存于bx
mov ax,dx ;将高16位进行除法运算
mov dx,0
div cx
mov si,ax ;将int(H/N)暂存于si
mov ax,di
mov cx,dx ;将最终余数给cx
mov dx,si
pop di
pop si
ret
code ends
end start
评论次数(1) |
浏览次数(408) |
类型(汇编作业) |
收藏此文 |