Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [asm]Арифметические команды и команды переходов


Автор: Daremez 20.1.2013, 21:53
Напишите программу на языке ассемблера с полным описанием сегментов для вычисления значения y. Используйте, где требуется, 32х-разрядные регистры.
http://s2.ipicture.ru/

Автор: Daremez 21.1.2013, 16:01
сделал но не пойму как сделать в одной программе два перехода:
Код


data segment
  a db ?
  x db ?
  y db 0
  y1 db 0
  y2 db 0
  per db 10,13,'$'
  mesa db 10,13,'input a: $'
  mesx db 10,13,'input x: $',10,13
data ends                 
stk segment stack        
 db 128 dup(?)           
stk ends                 
assume cs:code, ds:data, ss:stk    
code segment             
 start:    
       mov ax,data
       mov ds,ax   
       mov dx, offset mesa
       mov ah,9 ;приглашение на ввод а
       int 21h
       
        mov ah,1 ;считывание нажатого символа
        int 21h
        mov a,al
        
        mov dx,offset mesx
        mov ah,9 ;приглашение на ввод x
        int 21h
        
        mov ah,1 ;считывание нажатого символа
        int 21h
        mov x,al
        
        mov dx,offset per
        mov ah,9
        int 21h
        
        mov al,a
        cmp x,al
        jle Lower ;если x<=a, то перейти на метку Lower. Иначе на метку Higher.
        Lower:
            mov al,a
            add al,al
            sub al,x
            mov y1,al
            jmp short m2
        
        Higher:
            mov al,a
            add al,x
            mov y1,al
            
        m2:
        mov al,10
        cmp x,al
        jge Lower;если x<=10, то перейти на метку Lower. Иначе на метку Higher.
        Lower:
        mov y2,x
        jmp short m3
        Higher:
        mov al,a
        mul x
        mov y2,al
        m3:
        add y1,y2
        mov y,y1
        mov  y,02h      ;вывод элемента Х из DL на экран
        int  21h
       
        mov  ah,01h      ;остановка программы в 
        int  21h         ;ожидании нажатия клавиши  
        mov  ax,4c00h    ;завершение работы программы      
        int  21h       
code ends               
end start

Автор: Daremez 21.1.2013, 17:25
 smile 
Код

data segment
  a db ?
  x db ?
  y db 0
  y1 db 0
  y2 db 0
  per db 10,13,'$'
  mesa db 10,13,'input a: $'
  mesx db 10,13,'input x: $',10,13
data ends                 
stk segment stack        
 db 128 dup(?)           
stk ends                 
assume cs:code, ds:data, ss:stk    
code segment             
 start:    
       mov ax,data
       mov ds,ax   
       mov dx, offset mesa
       mov ah,9 ;приглашение на ввод а
       int 21h
       
        mov ah,1 ;считывание нажатого символа
        int 21h
        mov a,al
        
        mov dx,offset mesx
        mov ah,9 ;приглашение на ввод x
        int 21h
        
        mov ah,1 ;считывание нажатого символа
        int 21h
        mov x,al
        
        mov dx,offset per
        mov ah,9
        int 21h
        
        mov al,a
        cmp x,al
        jle Lower ;если x<=a, то перейти на метку Lower. Иначе на метку Higher.
        jg Higher
        Lower:
            mov al,a
            add al,al
            sub al,x
            mov y1,al
            jmp short m2
        
        Higher:
            mov al,a
            add al,x
            mov y1,al
            
        m2:
        mov al,10
        cmp x,al
        jge Small1;если x<=10, то перейти на метку Small1. Иначе на метку Bigg1.
        jl Bigg
        Small1:
        mov al,x
        mov y2,al
        jmp short m3
        Bigg:
        mov al,a
        mul x
        mov y2,al
        m3:
        mov al,y1
        mov bl,y2
        add al,bl
        mov y,al
    ;вывод на экран
 aam 
    add ax,3030h 
    mov dl,ah 
    mov dh,al 
    mov ah,02 
    int 21h 
    mov dl,dh 
    int 21h
mov ah,0
int 16h

mov ah,4ch
int 21h
   
code ends               
end start

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)