|
主题 : : 实验14,19行代码搞定! [已解决] |
回复[ 2次 ]
点击[ 443次 ] | |
荣誉值:26
信誉值:0
注册日期:2013-07-15 09:25 |
在研究学长们的基础上,终于使代码条数少20。
大家共享!
assume cs:code
data segment
db '2000/00/00 00:00:00','$',9,5,5,8,5,5,7,5,5,4,5,5,2,5,5,0,5,5,'!'
data ends
code segment
start: mov ax,data
mov ds,ax
mov dx,0 ;设置ds:dx指向data:0
sub bx,bx
mov cx,4
St_s: mov al,[bx].20 ;从data中取出指定位置的数据信息
out 70h,al ;将该单元地址传到地址端口70h
in al,71h ;从数据端口71h取出单元的数据
mov ah,al ;得到两份数据
shr al,cl ;右移分离得高4位十位数
and ah,00001111b ;与运算得低4位的个位数
add [bx].2,ax ;传到数据段data中相加,得ASCⅡ码
add bx,3 ;寻址偏移量增加3个单元
cmp byte ptr [bx].20,'!'
jne St_s ;判断结束标识符
mov ah,9 ;9号子程序设置
int 21h ;用int 21h输出字符串
mov ax,4c00h
int 21h
code ends
end start
程序发展主要历程:
1、ouxmm(zhihuimao 帖中17楼)在2011-01-11 22:59回复的程序中使用的
数据段:db 9,0,'/',8,0,'/',7,0,' ',4,0,':',2,0,':',0,0,'$'
代码为22条(实际可减至21条)。
2、ruder 在2011-01-26 19:42,在自己的帖中发表的程序
数据段:db 9, ' /', 8, ' /', 7, ' ', 4, ' :', 2, ' :', 0, ' $'
代码减至20条。首次将ah与al放到ax中一并处理,不再是mov ah,30h,mov al,30h这样处理。
3、hky987654321 在2013-09-02,在发表的上述程序中,
数据段:db '2000/00/00 00:00:00','$',9,5,5,8,5,5,7,5,5,4,5,5,2,5,5,0,5,5,'!'
代码减至19条。主要通过设计适当的数据段,将ruder程序中必须在代码段处理的add ax, 0011000000110000b,转移到数据段中处理(add [bx].2,ax ),使代码数量进一步减少。 | | |