有个疑问,你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:
复制代码
|