本帖最后由 老刘1号 于 2017-5-14 14:57 编辑
8086ASM(DEBUG版)- Echo off&CLS
- IF /i "%PROCESSOR_ARCHITECTURE%" EQU "AMD64" (
- echo DEBUG和8086_ASM不支持64位的系统。
- Pause&Exit
- )
- >"%Tmp%\DEBUGASM.TMP" (
- Echo A
- Echo MOV BX,20 ;一段安全的空间
- Echo MOV SS,BX
- Echo MOV SP,80 ;清理安全空间
- Echo MOV CX,40 ;循环次数(HEX)=清理字节数(128B)/入栈大小(2B)
- Echo SUB BX,BX ;清空BX
- Echo PUSH BX ;执行入栈(清理)
- Echo LOOP 10D ;循环压栈
- Echo SUB CX,CX ;清空CX
- Echo INT 21H
- Echo.&Echo G)
- Set /P str=Input a string:
- Echo E20:0 "%STR%">>"%Tmp%\DEBUGASM.TMP"
- More +25 "%~0" >>"%Tmp%\DEBUGASM.TMP"
- For /f "Tokens=2" %%a in (
- '^<%tmp%\DEBUGASM.TMP DEBUG^|Findstr /c:"0020:0000"'
- ) Do Set /a Strlen=0x%%a
- DEL %tmp%\DEBUGASM.TMP
- Echo %Strlen%&Pause&Exit /b
- A100
- MOV BX,20 ;一段安全的空间
- MOV DS,BX
- SUB BX,BX ;清空BX
- MOV CL,[BX] ;获取Ascii
- JCXZ 10E ;判断是否为NUL并跳出
- INC BX ;计数
- JMP 107 ;循环读取
- MOV [0],BX ;将字符串长度写入内存
- INT 21H
-
- G
- D20:0 0
- Q
- Q
复制代码
|