本帖最后由 老刘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 | | QCOPY |
|