assume cs:code
data segment
db 10 dup (0)
data ends
code segment
start:mov ax,12666
mov bx,data
mov ds,bx
mov si,0
call dtoc
mov dh,8
mov dl,3
mov cl,2
call show_str
mov ax,4c00h
int 21h
;---------------------------dtoc------------------------------
dtoc:push ax
push bx
push cx
push dx
push di
push si
mov bx,10
dtoc_s1:mov dx,0 ;做32位的除法,因为12666/10=1266 al中放不下
div bx ;除了以后 以为余数小于10,所以肯定在dl中,商在ax中
add dl,30h ;转换成ascii
mov cx,ax
mov byte ptr ds:[si],dl
inc si
jcxz dtoc_ok ;判断商是否为0,如果为0则跳转
jmp short dtoc_s1
dtoc_ok:mov byte ptr ds:[si],0
mov bl,2
mov ax,si
div bl ;计算出需要几次换位,把次数保存在al中
dec si ;指向最大的数
mov di,0 ;指向最小的数
mov ch,0
mov cl,al
dtoc_s2:mov al,ds:[si]
mov ah,ds:[di]
mov ds:[si],ah
mov ds:[di],al
dec si
inc di
loop dtoc_s2
pop si
pop di
pop dx
pop cx
pop bx
pop ax
ret
;---------------------------dtoc------------------------------
;-------------------------show_str---------------------------------
show_str:push dx
push cx
push bx
push es
push di
push si
push ax
mov ax,0b800h
mov es,ax ;指向显示缓冲段
mov al,0a0h ;用乘法算出行的地址用BX保存
mul dh
mov bx,ax
mov al,2 ;用乘法算出列的地址用DI保存
mul dl
mov di,ax
add bx,di ;计算出要显示字符的第一个二维数组的地址
mov dl,cl ;用dl保存颜色数据
show_str_s1:mov ch,0 ;用cx读取字符 如果为0则跳转到 show_str_ok处
mov cl,ds:[si]
jcxz show_str_ok
mov byte ptr es:[bx],cl
mov byte ptr es:[bx+1],dl
add bx,2
inc si
jmp short show_str_s1
show_str_ok:pop ax
pop si
pop di
pop es
pop bx
pop cx
pop dx
ret
;-------------------------show_str---------------------------------
code ends
end start
这用到了我前面写的两个子程序,直接COPY到这个程序里面就可以实现调用了
![学习动态](images/model1/b8.gif)
![最新评论](images/model1/b1.gif)
- 【WIN32汇编教程】(第一课)配置出WIN32汇编的开发环境
- 欢迎加入编程论坛:www.ghostasm.com 我们提供大量工具和学习的资料。VIP3高级群:89366200
- 在学汇编的来加群
- 为什么因为溢出导致了实际结果为负,那么逻辑上真正的结果必然为正呢?
- 第6章 实验5 第二题
- 【WIN32汇编教程】(第四课)编写出第一个“hello ghosthouse”程序
- 【WIN32汇编教程】(第三课)了解win32汇编程序的基本结构
- 【WIN32汇编教程】(第二课)Makefile文件的编写和nmake工具的使用
- 欢迎加入编程论坛:www.ghostasm.com 我们提供大量工具和学习的资料。VIP3高级群:89366200
- 欢迎加入编程论坛:www.ghostasm.com 我们提供大量工具和学习的资料。VIP3高级群:89366200
![](images/model1/b7.gif)