Utilice el lenguaje ensamblador 8086 para escribir un programa para ingresar un carácter en el teclado que termine con #. ¿Cuántos números, letras y espacios se cuentan?
stacksegmentstack\x0d\byte256dup(0)\x0d\stackends\x0d\\x0d\datasegment\x0d\C1dw0; número de espacios\x0d\C2dw0; \x0d\ C4dw0; Otros números de caracteres\x0d\BUFFdb64, 0, 64dup(?); Recibe el búfer de entrada, BUFF[0] almacena el tamaño del búfer, BUFF[1] almacena el número de entrada real, BUFF[2] comienza con datos de entrada\ x0d\SHEXDB'0123456789ABCDEF$'\x0d\MSG1db13,10,'space:$'\x0d\MSG2db13,10,'number:$'\x0d\MSG3db13,10,'alpha:$'\x0d\MSG4db13 ,10, 'otro:$'\x0d\MSG5db'inputyourdata,endtoinput#',13,10,'$'\x0d\dataends\x0d\\x0d\codesegment\x0d\assumecs:code,ss:stack,ds: datos\x0d \START:\x0d\movax, datos\x0d\movds, ax\x0d\movax, pila\x0d\movss, ax\x0d\\x0d\callGetInputData;\x0d\\x0d\callCountInputData;\x0d\\ x0d\; Muestra el número de espacios\x0d\movdx, offsetMSG1\x0d\movax, C1\x0d\callPrintLen\x0d\\x0d\; Muestra el número de dígitos\x0d\movdx, offsetMSG2\x0d\movax, C2\x0d \callPrintLen\x0d\\x0d \;Muestra el número de letras\x0d\movdx, offsetMSG3\x0d\movax, C3\x0d\callPrintLen\x0d\\x0d\; Muestra otros números\x0d\movdx, offsetMSG4\x0d\movax , C4\x0d\callPrintLen\x0d\ PROCEXIT:\x0d\; Salida del programa\x0d\movax, 4c00h\x0d\int21h\x0d\\x0d\; la dirección se almacena en DX\x0d\PrintLenprocnear\x0d\pushax\ x0d\movah, 9h\x0d\int21h\x0d\popax\x0d\\x0d\movcx, 4\x0d\PRINTLOOP:\x0d\rolax, 1\x0d\ rolax, 1\x0d\rolax, 1\x0d\rolax, 1\x0d\pushax\x0d\movdl, al\x0d\anddl, 0FH\x0d\movbx, offsetSHEX\x0d\addbl, dl\x0d\movdl, byptr[ bx]\x0d\movah, 2\x0d\int21h\x0d \popax\x0d\loopPRINTLOOP\x0d\ret\x0d\PrintLenendp\x0d\\x0d\CountInputDataprocnear\x0d\movch,0\x0d\movcl,byteptr[BUFF 1 ]\x0d\movsi,offsetBUF
F 2\x0d\MYLOOP:\x0d\moval,[si]\x0d\incsi\x0d\\x0d\cmpal, 20h;''space\x0d\jeCCOUNT1\x0d\cmpal,'0';'0'\x0d \jlCCOUNT4\x0d\cmpal,'9';'9'\x0d\jleCCOUNT2\x0d\cmpal,'A';'A'\x0d\jlCCOUNT4\x0d\cmpal,'Z';'Z'\x0d\jleCCOUNT3 \x0d\cmpal,'a';'a'\x0d\jlCCOUNT4\x0d\cmpal,'z';'z'\x0d\jleCCOUNT3\x0d\CCOUNT4:\x0d\incC4\x0d\jmpNEXTLOOP\x0d\;space \x0d\CCOUNT1:\x0d\incC1\x0d\jmpNEXTLOOP\x0d\;Número\x0d\CCOUNT2:\x0d\incC2\x0d\jmpNEXTLOOP\x0d\;Letra\x0d\CCOUNT3:\x0d\incC3\x0d\jmpNEXTLOOP\ x0d\NEXTLOOP:\x0d\loopMYLOOP\x0d\ret\x0d\CountInputDataendp\x0d\\x0d\; obtiene datos de salida, los datos de entrada se guardan en BUFF, número\x0d\GetInputDataprocnear\x0d\movdx, offsetMSG5\x0d\movah ' #'\x0d\jzEXITINPUT\x0d\cmpal, 13; omitir carácter de retorno de carro \x0d\jzINPUTLOOP\x0d\cmpal, 10; omitir carácter de nueva línea \x0d\jzINPUTLOOP\x0d\incbyteptr[BUFF 1]\x0d\movbyteptr[ bx] , al\x0d\incbx\x0d\loopINPUTLOOP\x0d\EXITINPUT:\x0d\ret\x0d\GetInputDataendp\x0d\\x0d\codeends\x0d\\x0d\endSTART