有个疑问,你14楼的代码为什么要多一行 echoo >nul?
是为了防止在不同的语言环境下出现“Invalid keyboard code specified”的错误输出干扰echoo.com的正常输出
主要是针对系统内不存在“英语(美国)”语言的情况
第一次运行echoo.com或其它的16位程序后键盘代码会进行切换
第二次运行不会再有这样的提示
echoo.com $# 创建的是"-"
echoo.com $$创建 但是"="
而echoo.com $#$$ 又创建的不是"=-" 而是"4#"
这里是怎么对应的?
程序固定从$后取两个字符进行计算
如果只跟一个字符则会将回车符0x0d取入合并计算
16进制转10进制算法并不严格检验输入数的合法性
所以会有一些莫名其秒的误差
第三句是取了$#$ 再取$
这段代码仍然是ASCII汇编大师Herbert Kleebauer 的作品
其作品通常只会有Motorola样式汇编源码
与通常我们所学习的Intel样式汇编略有不同
有余力的可以查看以下代码 | @=$178 | | move.w #1,r2 ; write 1 char | | move.w r2,r3 ; to stdout | | move.w #buf,r1 ; write buffer | | move.w r1,r6 | | move.w #$80,r5 | | | | movu.bw (r5.w),r4 ; cmdline length | | _30: inc.w r5 | | dec.w r4 | | bmi.b _100 ; at least 1 byte | | cmp.b #' ',(r5.w) | | beq.b _30 | | | | _10: move.b (r5.w),r0 ; next byte from cmdline | | inc.w r5 | | move.b r0,(r6.w) | | cmp.b #',r0 | | bne.b _20 | | move.b (r5.w),r0 | | inc.w r5 | | bsr.w hex2bin | | move.b (r5.w),r0 | | inc.w r5 | | bsr.w hex2bin | | _20: move.b #$40,m0 | | trap #$21 | | dec.w r4 | | bpl.b _10 | | _100: rts.w | | | | hex2bin: | | or.b #$20,r0 | | sub.b #'a'-10,r0 | | bpl.b _10 | | add.b #'a'-10-'0',r0 | | _10: lsl.b #4,(r6.w) | | add.b r0,(r6.w) | | dec.w r4 | | rts.w | | buf: COPY |
|