. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->端口
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验14,19行代码搞定!  [已解决] 回复[ 2次 ]   点击[ 443次 ]  
hky987654321
[帖 主]   [ 发表时间:2013-09-02 21:33 ]   [引用]   [回复]   [ top ] 
荣誉值: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 ),使代码数量进一步减少。
hky987654321
[第1楼]   [ 回复时间:2013-09-03 17:57 ]   [引用]   [回复]   [ top ] 
荣誉值:26
信誉值:0
注册日期:2013-07-15 09:25
补充一个问题,这个19条代码程序的数据结构,是否有可能优化设计后进一步精简代码?当然,我们只在已学知识范围内讨论。
hky987654321
[第2楼]   [ 回复时间:2013-09-04 02:31 ]   [引用]   [回复]   [ top ] 
荣誉值:26
信誉值:0
注册日期:2013-07-15 09:25
此贴由 贴主 于 [ 2013-09-04 02:31 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved