Programación en lenguaje ensamblador, cuente el número de números y letras en una cadena de 50 bytes de caracteres y luego súmelos.
CÓDIGO?SEGMENTO ASSUMECS:CODE ORG100H INICIO:?PUSH?CS POPDS PUSH?CS POPES LEADX, STR1 MOVAH, 10 INT21H CALL?WRITELN LEASI, STR1 MOVCL, [SI 1] MOVCH, 0 INCSI INCSI MOVBYTE ?PTR?NN, 0 MOVBYTE?PTR?NC, 0 @MAIN0: ?MOVAH, 0 MOVAL, [SI] CALL?POSC CMPAH, 1 JNE@MAIN1 INCBYTE?PTR?NC @MAIN1: ?CALL?POSN CMPAH, 1 JNE @MAIN2 INCBYTE?PTR?NN @MAIN2: INCSI LOOP?@MAIN0 MOVAL, BYTE?PTR?NC ADDAL, BYTE?PTR?NN MOVAH, 0 CALL?DISPAX MOVAH, 4CH INT21H
STR1?DB200 DB0 DB200?DUP(?) NN?DB0 NC?DB0
;=============================== == ===
POSN?PROC?NEAR PUSH?CX PUSH?SI PUSHF MOVCX,10 LEASI,STR2N @POSN0:?CMPAL,[SI] JE@POSNEXIT INCSI LOOP?@POSN0 MOVAH,0 POPF POPSI POPCX RET @POSNEXIT: MOVAH, 1 POPF POPSI POPCX RET
STR2N?DB'0123456789'
POSN?ENDP
; = ==========================
POSC?PROC?NEAR PUSH?CX PUSH?SI PUSHF MOVCX, 52 LEASI , STR2C @POSC0: ?CMPAL,[SI] JE@POSCEXIT INCSI LOOP?@POSC0 MOVAH, 0 POPF POPSI POPCX RET @POSCEXIT: MOVAH, 1 POPF POPSI POPCX RET
STR2C?DB'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'< / p>
POSC?ENDP
;=============================;?El número sin firmar para mostrar COLOCAR EN ?AX? DISPAX?PROC?NEAR PUSH?AX PUSH?BX PUSH?CX PUSH?DX PUSH?SI PUSH?DI PUSH?BP PUSHF PUSH?DS PUSH?CS POPDS MOVBYTE?PTR?NZ, 0 PUSH ? AX LEASI, DIVARR MOVCX, 5 @1: POPAX MOVDX, 0 MOVBX,
[SI] DIVBX PUSH?DX CMPAL, 0 JNE@2 CMPBYTE?PTR?NZ, 1 JE@2 CMPCX, 1 JE@2 MOVDL, 20H JMP@3 @2: ADDAL, 30H MOVDL, AL MOVBYTE?PTR?NZ, 1 @3: MOVAH, 2 INT21H INCSI INCSI LOOP?@1 POPDX POPDS POPF POPBP POPDI POPSI POPDX POPCX POPBX POPAX RET DIVARR?DW10000, 1000, 100, 10, 1 NZ?DB0 DISPAX?ENDP
; =============================================== ESCRIBIR?PROC? NRAR PUSH?AXE PUSH?DX PUSHF LEADX, LFCR MOVAH, 9 INT21H POPF POPDX POPAX RET
LFCR?DB10, 13, '$' WRITELN?ENDP
; =======================================?
¿CÓDIGO?ENDS FINALIZAR