- [regex] O(∩_∩)O哈哈~ 02/05 18:44
- [qiangzi] 可爱 02/04 21:26
- [游客] revcp:逆序复制的意思 因为执行完d2c之后, 数字都是倒序排列的, 所以得rev一下 02/02 13:28
- [regex] 那个loo用的不对!应改为jmp short 比较好 01/30 15:24
- [regex] 三个实验踉踉跄跄磕磕绊绊的搞出来啦, 虽然不太精彩, 可是毕竟是自己的心血。 通过这个三个实验, 01/30 12:32
- [游客] 程序多用他们配合时间模块化编程,也就是子程序。 01/25 14:20
- [regex] 嘿嘿~~~, 初学者,不知道写啥 O(∩_∩)O哈哈~ 01/15 15:54
- [abob] 博客好干净啊 ^_^ 01/05 11:15
[2010-01-30 00:36] 作业:【实验】10.3
终于把实验三做出来啦, 虽然代码垃圾了点。。。
==================================================
root@yeah /cygdrive/d/asm
$ more disp.asm
assume cs:code
data segment
dw 1357,246,110,893,23,2
data ends
;定义一个附加数据段,用于存放转换后的ascii
data1 segment
dw 32 dup (0)
data1 ends
code segment
start: mov ax,data
mov ds,ax
mov si,0
mov di,0
mov bp,20h ;目标起始地址
main: mov ax,[si] ;如遇到零则转换结束
mov cx,ax ;
jcxz show ;执行show代码段
call d2c ;如数据非零则转换
mov bx,si ;保存一下si的值
mov si,0 ;转换结束执行数据复制
jmp short revcp ;即执行revcp处代码
next: mov si,bx ;取出si的值
add si,2 ;处理下一数据
mov di,0 ;
jmp short main ;继续主循环。
d2c: mov bx,0ah ;开始digital到char的
sub dx,dx ;转换
div bx ;
add dx,30h ;将转换后的数字变成ASCII
mov [di+10h],dx ;然后存放至暂存地址DS:10处
mov cx,ax ;如商为零则执行d2c下面指令
jcxz re
inc di
jmp short d2c
re: ret
revcp: mov al,[di+10h] ;开始复制数据
mov ds:[bp+si],al ;
mov cl,al ;
mov ch,0 ;
jcxz ok
dec di
inc si
jmp short revcp
ok: mov al,20h ;复制后的数据加空格
mov ds:[bp+si],al ;
add bp,si ;保存目标地址
inc bp
jmp short next ;处理下一个数字串
show: mov bx,0b800h ;开始显示字符串
mov es,bx
mov si,0
mov dh,8 ;定义行列值及属性
mov dl,3 ;
mov cl,2 ;
mov ax,0a0h ;初始化行
mul dh
mov bp,ax
mov ah,cl
disp: mov bl,dl
mov bh,0
mov di,bx ;初始化列
mov cl,[si+20h] ;开始逐字节显示
mov ch,0
jcxz over ;
mov al,[si+20h]
mov es:1[bp+di],ax
inc si
add dl,2
jmp short disp
over: mov ah,4ch
int 21h
code ends
end start
==================================================
==================================================
root@yeah /cygdrive/d/asm
$ more disp.asm
assume cs:code
data segment
dw 1357,246,110,893,23,2
data ends
;定义一个附加数据段,用于存放转换后的ascii
data1 segment
dw 32 dup (0)
data1 ends
code segment
start: mov ax,data
mov ds,ax
mov si,0
mov di,0
mov bp,20h ;目标起始地址
main: mov ax,[si] ;如遇到零则转换结束
mov cx,ax ;
jcxz show ;执行show代码段
call d2c ;如数据非零则转换
mov bx,si ;保存一下si的值
mov si,0 ;转换结束执行数据复制
jmp short revcp ;即执行revcp处代码
next: mov si,bx ;取出si的值
add si,2 ;处理下一数据
mov di,0 ;
jmp short main ;继续主循环。
d2c: mov bx,0ah ;开始digital到char的
sub dx,dx ;转换
div bx ;
add dx,30h ;将转换后的数字变成ASCII
mov [di+10h],dx ;然后存放至暂存地址DS:10处
mov cx,ax ;如商为零则执行d2c下面指令
jcxz re
inc di
jmp short d2c
re: ret
revcp: mov al,[di+10h] ;开始复制数据
mov ds:[bp+si],al ;
mov cl,al ;
mov ch,0 ;
jcxz ok
dec di
inc si
jmp short revcp
ok: mov al,20h ;复制后的数据加空格
mov ds:[bp+si],al ;
add bp,si ;保存目标地址
inc bp
jmp short next ;处理下一个数字串
show: mov bx,0b800h ;开始显示字符串
mov es,bx
mov si,0
mov dh,8 ;定义行列值及属性
mov dl,3 ;
mov cl,2 ;
mov ax,0a0h ;初始化行
mul dh
mov bp,ax
mov ah,cl
disp: mov bl,dl
mov bh,0
mov di,bx ;初始化列
mov cl,[si+20h] ;开始逐字节显示
mov ch,0
jcxz over ;
mov al,[si+20h]
mov es:1[bp+di],ax
inc si
add dl,2
jmp short disp
over: mov ah,4ch
int 21h
code ends
end start
==================================================
评论次数(2) |
浏览次数(899) |
类型(默认类型) |
收藏此文 |
[ regex 发表于 2010-01-30 12:32 ]
三个实验踉踉跄跄磕磕绊绊的搞出来啦, 虽然不太精彩, 可是毕竟是自己的心血。
通过这个三个实验, 最大的收获是对debug使用, 还有程序中细节的考虑, 遗憾的就是对栈的操作有些怵头+_+,
开始做课题设计那个啦,再把头10章仔细看一遍。。。
[ 游客 发表于 2010-02-02 13:28 ]
revcp:逆序复制的意思
因为执行完d2c之后, 数字都是倒序排列的, 所以得rev一下