es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo arreglar el error causado por @data en Visual Studio Code 2019 en ASM?

Soy un traductor de español que traduce documentos de tecnología. Traduzca lo siguiente al español. No traduzca el código y la salida en markdown.

Soy un poco nuevo en ASM. Estoy tratando de encontrar el valor más pequeño en una matriz DWORD. Estoy obteniendo el error A2006: símbolo no definido: DGROUP en la línea 11 de mi código. Creo que @ data está causando mi error. ¿Cómo debo modificar mi código para solucionar este problema? Estoy usando 32 bits de visual studio code 2019. ¡Gracias por su tiempo!


.modelo pequeño .pila .datos         msg1 db 0dh, 0ah, 'el elemento más pequeño es: $'         array db 2,3,4,1,0,-2,-5,8,6         pequeño db? .código proc principal         mov ax, @ datos         mov ds, ax         lea di, array         mov cx, 9; 5 veces el recuento         mov al, [di]; enviar la ubicación de memoria del registro 'di' al 'al' de datos         mov pequeño, al paso:; nivel           inc di           mov bl, [di]           cmp pequeño, bl           jle l1; jge = saltar mayor o igual,           mov pequeño, bl l1:          loop step          add pequeño, 30h; entero a carácter (add30 para el valor asii)          lea dx, msg1          mov ah, 09h          int 21h          mov dl, pequeño          mov ah, 02h          int 21h mov ah, 4ch int 21h   principal finp end main
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El error que está experimentando probablemente se debe al uso de la directiva .model small, que es un modelo de memoria de 16 bits, mientras que está utilizando un entorno de 32 bits. En su lugar, debe utilizar la directiva .model flat, que es el modelo de memoria predeterminado para entornos de 32 bits.

    Aquí está el código modificado:

    .model flat
    .stack
    .data
              msg1 db 0dh,0ah, 'El elemento más pequeño es:$'
              array dd 2, 3, 4, 1, 0, -2, -5, 8, 6
              smallest dd ?
    .code
    
    main proc
              mov edi,OFFSET array
    
              mov ecx,9 ; 9 elementos en el array
              mov eax,[edi] ; envía la ubicación de la memoria al registro 'edi' de datos 'eax'
              mov [smallest],eax
    
              step:  ;nivel
                       add edi, 4 ; dword = 4 bytes
                       mov ebx,[edi]
    
                       cmp [smallest],ebx
                       jle l1  ;jge= saltar a mayorigual ,
    
                       mov [smallest],ebx
              l1:
                       loop step
                       add [smallest],30h ; entero a caracter (agregar 30 para el valor ASCII)
    
                       lea edx,msg1
    
                       mov ah,09h
                       int 21h
    
                       mov dl,[smallest]
                       mov ah,02h
                       int 21h
    
              mov ah,4ch
              int 21h
    main endp
    end main
    

    Algunas cosas a tener en cuenta:
    – La declaración de array se ha cambiado a dd para declarar un array DWORD.
    – La variable smallest también se ha declarado como DWORD.
    – La línea lea di,array se ha cambiado a mov edi,OFFSET array para obtener la dirección del array.
    – La línea mov al,[di] se ha cambiado a mov eax,[edi] para cargar un DWORD.
    – La línea mov smallest,al se ha cambiado a mov [smallest],eax para almacenar un DWORD.
    – La línea mov smallest,bl se ha cambiado a mov [smallest],ebx para almacenar un DWORD.
    – La línea add smallest,30h se ha cambiado a add [smallest],30h para agregar 30 al DWORD.
    – La línea mov dl,smallest se ha cambiado a mov dl,[smallest] para cargar un BYTE.
    – La línea mov ah,4ch y la siguiente línea no se han cambiado y deberían funcionar sin problemas.

Comments are closed.