实验10,第三题,独立完成,显摆下
本帖最后由 liuhui88126 于 2011-7-1 16:49 编辑;>>>>编程,将数据12666以十进制的形式在屏幕的8行3列,用绿色显示出>>>>>>>>>>>>>>>>>>>>>>>>
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
dtoc:mov si,1;第一个内存单元下面有用,所以设置从第二个开始存放数据
ck: mov bx,10;如果用8位除数的话,结果为1266,AL放不下,导致除法溢出,所以要用16位除数
mov dx,0 ;高16位被除数清空
div bx;除法
mov bl,dl;余数放入BL
mov cx,bx;判断余数是否为0
jcxz ok;跳转
mov byte ptr ds:,dl ;不为0的话就存
inc si
loop ck
ok:ret
show_str:push cx;保护CL的值
mov ax,0b800h
mov es,ax
mov di,0
mov al,160 ;数据显示区
mul dh
mov bx,ax;数据显示
cd:mov cl,ds: ;把当前数据段中的数据拿出比较,是否为0
mov ch,0
jcxz exit ;为0跳
add cl,30h;数据+30,转换12666ASCII码
mov al,cl ;数据放入AL
pop cx ;取出颜色值
mov ah,cl ;放入颜色值
mov word ptr es:6,ax ;显示
add di,2
dec si ;逆序一个一个比较,到了第一个的时候,数据是为0的,就说明结束了,这就是为什么上面要mov si,1的原因了。
push cx
jmp short cd
exit:mov ax,4c00h
int 21h
code ends
end start
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>经测试,没问题>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
我要晕了 你竟然用后面学的命令用在了实验10 为什么要设计这么复杂的代码 完全可以简化的啊:funk: 不是吧,我后面的还没学啊,我用到的都是之前的知识啊。你没弄错吧 我正好学到这里呢 我再咬牙坚持一下。。也会到第十章,也会编出漂亮的代码!!! 我证明的确没有用到不该用的只是(嘿嘿……) 全都是在那个实验之前的知识哦! 牛比 转移指令理解的真透彻 是我看错了 楼主小弟深表歉意 内心惶恐不安 敬请谅解 :L 兄弟言重了,互相学习{:5_108:} 论坛数据是不是出问题了,我们的头像呢? 我学破解,我只希望自己能读懂,暂时还不需要会写。:dizzy: 不容易啊~~~呵呵
呵呵,,,,,,,, 楼主的帖子呵呵呵好怎么样?赶紧试试这里的快速回复给楼主点评论吧呵呵好 真是难得给力的帖子啊。
页:
[1]