На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
  
> вывести матрицу вида
    ребят,нужна помощь

    нужно вывести матрицу вида
    AA AB AC AD
    BA BB BC BD
    ...
    DA DB DC DD

    вот прога, но работает не совсем так как надо..
    где ошибка?
    ExpandedWrap disabled
      use16                
      org 100h              
       
          mov ah,02h        
          mov dl,65
          mov al,65
          mov cx,4
      metka1:
         mov bx,cx
         mov cx,4
       
      metka2:
         int 21h
         mov dh,dl
       
       
          mov bl,al
         mov dh,dl
         mov dl,al
         int 21h
         inc al
       
         mov dl,32
         int 21h
          mov dl,dh
       
         loop metka2
       
          mov dh,dl
          mov dl,13
          int 21h
          mov dl,10
          int 21h
          mov dl,dh
          inc dl
          mov cx,bx
          loop metka1
       
          mov ah,09h        
          mov dx,press      
          int 21h
       
          mov ah,08h        
          int 21h          
       
          mov ax,4C00h      
          int 21h          
          ;__________________________________________________
           press db 13,10,'Press any key...$'
      Цитата Chaynik @
      где ошибка?
      Наверное тут: вы в BX (по сути, в BL) храните номер строки, но во внутреннем цикле metka2..loop_Metka2 портите это значение командой "mov bl,al".
        Цитата Славян @
        Наверное тут: вы в BX (по сути, в BL) храните номер строки, но во внутреннем цикле metka2..loop_Metka2 портите это значение командой "mov bl,al".

        а как же мне сохранить значение al, что б на след строке опять начиналось с А?
        Сообщение отредактировано: Chaynik -
          Цитата Chaynik @
          а как же мне сохранить значение al, что б на след строке опять начиналось с А?
          Ещё есть SI и DI. ;)
            Славян
            Прикреплённый файлПрикреплённый файл68__90__.png (12,21 Кбайт, скачиваний: 667)
              Я имел ввиду, что вы бы вместо BX могли использовать SI или DI там, где напряг с нужностью BX:
              ExpandedWrap disabled
                metka1:
                   mov SI, cx
                ...
                    mov cx, SI
                    loop metka1
                Славян, ну вот..
                ExpandedWrap disabled
                   use16
                  org 100h              
                   
                      mov ah,02h        
                      mov dl,65
                      mov al,65
                      mov cx,4
                  metka1:
                     mov si,cx
                     mov cx,4
                   
                  metka2:
                     int 21h
                     mov dh,dl
                     int 21h
                     inc bh
                   
                     mov dl,32
                     int 21h
                     mov dl,dh
                  loop metka2
                   
                      mov dh,dl
                      mov dl,13
                   
                      int 21h
                      mov dl,10
                   
                      int 21h
                      mov dl,dh
                      inc dl
                      mov cx,si
                  loop metka1
                   
                      mov ah,09h        
                      mov dx,press      
                      int 21h
                   
                      mov ah,08h        
                      int 21h          
                   
                      mov ax,4C00h      
                      int 21h          
                      ;__________________________________________________
                       press db 13,10,'Press any key...$'

                Прикреплённый файлПрикреплённый файл__________.png (16,31 Кбайт, скачиваний: 681)
                Сообщение отредактировано: Chaynik -
                  Можно так попробовать:
                  ExpandedWrap disabled
                    metka2:
                       int 21h
                       mov dh,dl
                       sub DL, CL
                       add DL, 4 ; по сути: вывод=DL+(4-CL) = DL+(0..3)
                       int 21h
                    ...
                  Если команды "add DL, 4" не найдётся, то можно такую короткую ахинею в 4 байта сотворить:
                  ExpandedWrap disabled
                    xchg AL, DL
                    add AL, 4
                    xchg AL, DL
                  :crazy:
                    Цитата Chaynik @
                    metka2: int 21h
                    mov dh,dl
                    int 21h
                    inc bh

                    там не DH вместо BH ?
                      Славян, опять не совсем то что нужно...
                      Прикреплённый файлПрикреплённый файл__________.png (16,53 Кбайт, скачиваний: 620)
                        Цитата Chaynik @
                        нужно вывести матрицу вида


                        Сделал для NASM под системные вызовы *nix (ссылка):

                        ExpandedWrap disabled
                          global _start
                           
                          section .data
                              buf     db  '           ',0xa
                              len     equ $ - buf
                           
                          _start:
                              mov     dh,4
                              mov     dl,4
                          rows:
                              test    dl,dl
                              je      exit
                              mov     al,'E'
                              sub     al,dl
                              xor     ebx,ebx
                          cols:
                              mov     ah,'E'
                              sub     ah,dh
                              mov     [buf+ebx],al
                              mov     [buf+ebx+1],ah
                              add     ebx,3
                              dec     dh
                              cmp     dh,0
                              jne     cols
                              mov     dh,4
                              call    print_line
                              dec     dl
                              jmp     rows
                           
                          print_line:
                              push    eax
                              push    ebx
                              push    ecx
                              push    edx
                              mov     edx,len
                              mov     ecx,buf
                              mov     ebx,1
                              mov     eax,4
                              int     0x80
                              pop     edx
                              pop     ecx
                              pop     ebx
                              pop     eax
                          ret
                           
                          exit:
                             mov    eax, 01h
                             xor    ebx, ebx
                             int    80h


                        Под винду надо подумать малеха, просто на асме давно не кодил :-?
                          Вариант для виндовой консоли.

                          Ассемблер - FASM:

                          ExpandedWrap disabled
                            format PE console
                             
                            include 'win32wxp.inc'
                             
                            .data
                                buf      TCHAR   '          '
                                eol      DW      13,10
                                dummy        rd      1
                                handle       DD      ?
                             
                            .code
                              start:
                                invoke  AllocConsole
                                invoke  GetStdHandle,STD_OUTPUT_HANDLE
                                mov [handle],eax
                                mov edx,0x404
                              rows:
                                test    dl,dl
                                je  exit
                                mov al,'E'
                                sub al,dl
                                xor ebx,ebx
                              cols:
                                mov ah,'E'
                                sub ah,dh
                                mov byte[buf+ebx],al
                                mov byte[buf+ebx+1],ah
                                add ebx,3
                                dec dh
                                cmp dh,0
                                jne cols
                                mov dh,4
                                call    print_line
                                dec dl
                                jmp rows
                              print_line:
                                push    eax
                                push    ebx
                                push    ecx
                                push    edx
                                invoke  WriteConsoleA,[handle],buf,11,dummy,0
                                invoke  WriteConsole,[handle],eol,2,dummy,0
                                pop edx
                                pop ecx
                                pop ebx
                                pop eax
                                ret
                              exit:
                                invoke  Sleep,1
                                invoke  ExitProcess,0
                            .end start
                            Цитата Chaynik @
                            опять не совсем то что нужно...
                            :oops: Эх, чайник-чайничек, ну доколдовали бы что-нибудь вида:
                            ExpandedWrap disabled
                              metka2:
                                 int 21h
                                 mov dh,dl
                                 mov DL, 65+4 ; 'A'+4
                                 sub DL, CL ; по сути: вывод='A'+(4-CL) = 'A'+(0..3)
                                 int 21h
                              ...
                              JoeUser, спасибо большое!!

                              Добавлено
                              Славян, и вам спасибо)
                                ExpandedWrap disabled
                                  format PE console
                                  entry start
                                   
                                  include 'win32a.inc'
                                   
                                  section '.data' data readable writeable
                                  hex_print_format db '%X ', 0
                                  end_line db 0x0A, 0
                                  row dd 0
                                  value dd 0xAA
                                   
                                  section '.code' code readable executable
                                  start:
                                    mov [row], dword 4
                                  .put:
                                    cinvoke printf, hex_print_format, [value]
                                    inc [value]
                                    dec [row]
                                    jnz .put
                                    cmp [value], dword 0xDD
                                    jae .end
                                    add [value], dword (0x10 - 0x4)
                                    cinvoke printf, end_line
                                    jmp short start
                                  .end:
                                    cinvoke getch
                                    invoke ExitProcess, 0
                                   
                                  section '.idata' import data readable
                                  library kernel,'kernel32.dll',\
                                          msvcrt,'msvcrt.dll'
                                   
                                  import kernel,\
                                         ExitProcess,'ExitProcess'
                                   
                                  import msvcrt,\
                                         printf,'printf',\
                                         getch,'_getch'
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0516 ]   [ 21 queries used ]   [ Generated: 25.04.24, 07:18 GMT ]