Как переносить информацию из 8битного регистра в 16битный - Assembler

Узнай цену своей работы

Формулировка задачи:

если перенейсти в bx значение 10, не поменяется ли от этого значение в bh? как вообще переносить из 8битного регистра инфу в 16битный? ибо действия умножения и деления производятся только с 16 битнымы регистрами. можно ли это сделать подобным образом, специально создав для жтого массив?
outputt db  10 dup(0)
mov si, offset outputt + 9  ; 
        mov [si], bl
        mov ax, [si]

Решение задачи: «Как переносить информацию из 8битного регистра в 16битный»

textual
Листинг программы
; Programa: Nr. 10
; UЕѕduoties sД…lyga: ParaЕЎykite programД…, kuri ДЇveda eilutД™ ЕѕodЕѕiЕі, atskirtЕі tarpais ir atspausdina ЕЎiЕі ЕѕodЕѕiЕі ilgius. Pvz.: ДЇvedus asd fghas asd turi atspausdinti 3 5 3
; Atliko:
 
.model small
.stack 100h
     
.data
    request     db 'Programa skaiciuoja kiek simboliu kiekviename zodyje', 0Dh, 0Ah, 'Iveskite simboliu eilute:', 0Dh, 0Ah, '$'
;   error_len   db 'Ivesti galite ne daugiau 5 simboliu $'
    result      db 0Dh, 0Ah, 'Rezultatas:', 0Dh, 0Ah, '$'
    buffer      db 100, ?, 100 dup (0)
    output  db  10 dup(0)
        outputt db  10 dup(0)
 
.code
 
start:
    MOV ax, @data                   ; perkelti data i registra ax
    MOV ds, ax                      ; perkelti ax (data) i data segmenta
     
    mov si, offset output + 10  ; si nurodyti б eilutлs paskutinб simbolб
    mov byte ptr [si], '$'      ; бkelti ten pabaigos simbolб   
    ; Isvesti uzklausa
    MOV ah, 09h
    MOV dx, offset request
    int 21h
 
    ; skaityti eilute
    MOV dx, offset buffer           ; skaityti i buffer offseta 
    MOV ah, 0Ah                     ; eilutes skaitymo subprograma
    INT 21h                         ; dos'o INTeruptas
 
 
        ; isvesti: rezultatas
    MOV ah, 09h
    MOV dx, offset result
    int 21h
    mov bl, "0" 
    
    ; f-ja
    ;mov    si, offset buffer + 100     ; si nurodyti б eilutлs paskutinб simbolб
    ;mov    byte ptr [si], '$'      ; бkelti ten pabaigos simbolб
abc:
    MOV si, offset buffer           ; priskirti source index'ui bufferio koordinates
    INC si                          ; pridedam 1 prie si , nes pirmas kiek simboliu ish viso
    MOV bh, [si]                    ; idedam i bh kiek simboliu is viso
    INC si                          ; pereiname prie pacio simbolio
    
 
    
 
 
    
char:
    LODSB                           ; imti is es:si stringo dali ir dedame i al 
    
    CMP al, 20h ; lyginti, ar simbolis yra tarpas
    jne toliau 
    jmp 
                    
 
    
 
                      
toliau:
    inc bl ; skaitliukas bl 
    dec bh ; atimti 1 is eilutes simboliu kiekio jei bh = 0 , programa baigia darba                      ;kitaip sokti link kito simbolio
    jz asc2
    jmp char
asc2:   
    mov si, offset outputt + 9  ; si nurodyti б eilutлs paskutinб simbolб
        mov [si], bl
        mov ax, [si]
    mov dx, 0       ; iрvalyti dx, nes иia bus liekana po div
    div bx              ; div ax/bx, ir liekana padedama dx
    add     dx, '0'         ; pridлti 48, kad paruoрti simbolб iрvedimui
        mov si, offset output + 10  ; si nurodyti б eilutлs paskutinб simbolб
    dec     si      ; sumaюinti si - иia bus padлtas skaitmuo
    mov [si], dl    ; padлti skaitmenб
    
    cmp     ax, 0       ; jei jau skaiиius iрdalintas
        jz  print           ; tai eiti б pabaigа
        jmp     asc2            ; kitu atveju imti kitа skaitmenб
 
print:
        mov ah, 9            ; atspausdinti skaitmenis
        mov dx, si
        int 21h
ending:
    MOV ax, 4c00h               ; griztame  dos'a
    INT 21h                         ; dos'o INTeruptas
     
end start

Оцени полезность:

11   голосов , оценка 4.364 из 5
Похожие ответы