|
主题 : : 实验14 代码16条 有点另类 再减当如何? [已解决] |
回复[ 4次 ]
点击[ 359次 ] | |
|
|
|
|
[帖 主] [ 发表时间:2014-02-05 16:40 ] | |
荣誉值:26
信誉值:0
注册日期:2013-07-15 09:25 |
实验14 狠挖掘潜力,代码减至16条90字节。增大数据段,总觉得另类和怪怪的。
两问题:
1、再减代码条数的思路?
2、如果有可能,减到只剩数据段会如何?机器语言?
assume cs:code
data segment
db '2000/00/00 00:00:00','$',16,0 ;置16和0,16位乘数的低8位与高8位
db 9,0,0,8,0,0,7,0,0,4,0,0,2,0,0,0,0,0 ;置0使相乘后(dx) = 0 成立
db 0,9,0,0,4ch,0 ;置(ah) = 9 、4ch 及(al) = 0
data ends
code segment
start:mov ax,data ; 1 读取数据段地址
mov ds,ax ; 2 设置数据段
sub bx,bx ; 3 ds:dx指向data:0;本条亦可删除,但仍保留
St_s: mov ax,[bx].22 ; 4 从data中取出指定位置的数据信息
cmp ah,9 ; 5 判断是否读到ah=9及4ch
jnb ok ; 6 读到则去进行输出及返回操作
out 70h,al ; 7 将该单元地址传到地址端口70h
in al,71h ; 8 从数据端口71h取出单元的数据
or [bx].3,al ; 9 分存到数据段中
and byte ptr [bx].3,3fh ;10 分存数据纯化为(30h + 个位)
mul word ptr ds:[20] ;11 左移4位,ah中得纯十位数,并置(dx)=0
add [bx].2,ah ;12 传到data中相加,得其ASCⅡ码
return:add bx,3 ;13 寻址增3个字节
jmp St_s ;14 继续
ok: int 21h ;15 输出时钟及返回
jmp return ;16 转去使ax=4c00h
code ends
end start | | |
|
|
|
|
[第1楼] [ 回复时间:2014-02-09 22:28 ] | |
荣誉值:26
信誉值:0
注册日期:2013-07-15 09:25 |
实验14 代码14条
超越知识的范围,就超越了自我!
assume cs:code
code segment
db '2000/00/00 00:00:00','$',16,0 ;置16和0,16位乘数的低8位与高8位
db 9,0,0,8,0,0,7,0,0,4,0,0,2,0,0,0,0,0 ;置0使相乘后(dx) = 0 成立
db 0,9,0,0,4ch ;置(ah) = 9 、4ch 及(al) = 0
dw 0 , seg start ;存放32位地址 cs:0
start:LDS bx,cs:[45] ; 1 ds:bx = cs:0
St_s: mov ax,[bx].22 ; 2 从data中取出数据,存于ax
cmp ah,9 ; 3 是否读到ah=9或4ch
jnb ok ; 4 读到,显示时钟或返回
out 70h,al ; 5 传送单元地址
in al,71h ; 6 取出数据
or [bx].3,al ; 7 分存到数据段中
and byte ptr [bx].3,3fh ; 8 分存数据纯化为(30h + 个位)
mul word ptr ds:[20] ; 9 乘以16,ax左移4位,ah存十位数,并置(dx)=0
add [bx].2,ah ;10 传到data中相加,得其ASCⅡ码
return:add bx,3 ;11 寻址增3个字节
jmp St_s ;12 继续
ok: int 21h ;13 输出时钟或返回
jmp return ;14 转去使ax=4c00h
code ends
end start | | |
|