Recent Posts
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Value too long for column
- 티스토리챌린지
- 헥사고날아키텍처 #육각형아키텍처 #유스케이스
- preemption #
- vfr video
- tolerated
- 겨울 부산
- PytestPluginManager
- 깡돼후
- JanusWebRTC
- pytest
- JanusWebRTCServer
- JanusGateway
- JanusWebRTCGateway
- 자원부족
- python
- 오블완
- PersistenceContext
- 개성국밥
- k8s #kubernetes #쿠버네티스
- 달인막창
- VARCHAR (1)
- mp4fpsmod
- taint
- table not found
- kotlin
- Spring Batch
- terminal
- 코루틴 빌더
- 코루틴 컨텍스트
Archives
너와 나의 스토리
어셈블리 - FPU 예제 (실습 코드) 본문
반응형
1) 사용자에게 원의 반경을 묻고 원의 면적을 계산하고 화면에 표시하라
call readfloat ; 사용자 입력 받아서 ST(0)에 넣음
fmul st(0),st(0) ; st(0)=st(0)*st(0)
fldpi ; st(0)=pi, st(1)=사용자 입력값^2
fmul ; st(1)=st(1)*st(0), st(0) pop
call writefloat
2) ax^2+bx+c=0 에서 다항식 근 구하기 (사용자로부터 a,b,c 값 받아서 구하기)
할 일:
1. a,b,c 사용자 입력 받기
2. B^2-4AC 구하기
3. 첫 번째 근 (-B+root(B^2-4AC))/2A 구하기
4. 두 번째 근 (-B-oot(B^2-4AC))/2A 구하기
include irvine32.inc
.data
coeffA real8 ?
coeffB real8 ?
coeffC real8 ?
two real8 2.0
four real8 4.0
zero real8 0.0
part1 real8 ?
junk real8 2.0
str1 byte "해당 근은 허수이다.",0
str2 byte "첫번째 근: ",0
str3 byte "두번째 근: ",0
.code
main proc
; 사용자 입력 받기
call readfloat
fst coeffA
call readfloat
fst coeffB
call readfloat
fst coeffC
; st(0)=c, st(1)=b, st(2)=a
finit ; FPU stack 초기화
; B^2-4AC 연산
fld coeffB
fmul st(0),st(0) ; st(0)=b^2
fld four
fmul coeffA
fmul coeffC ; st(0)=4AC, st(1)=b^2
fsub ; st(0) = B^2-4AC
; 허수 판별
fld zero ; st(0)=0 ,st(1)= B^2-4AC
fcomi st(0),st(1)
ja imaginary_root ; 0이 B^2-4AC보다 크다면 jump
fstp junk ; junk =0
fsqrt ; square root
fst part1 ; root(B^2-4AC)
; 첫 번째 근 계산
fld coeffB
fchs ; st(0)=-B
fadd part1 ; -B+root(B^2-4AC)
fld coeffA
fmul two ; st(0)=2A
fdivp st(1),st(0) ; part1/2A
mov edx,offset str2
call writestring
call writefloat
call crlf
; 두 번째 근 구하기
fld coeffB
fchs
fsub part1 ; -B-root(B^2-4AC)
fld two
fmul coeffA ; 2A
fdivp
mov edx,offset str3
call writestring
call writefloat
call crlf
jmp normal_finish
imaginary_root:
mov edx,offset str1
call writestring
normal_finish:
exit
main endp
end main
반응형
'Programming Language > Assembly' 카테고리의 다른 글
어셈블리 - FPU(부동 소수점 유닛) (0) | 2019.06.07 |
---|---|
어셈블리 - push&pop 명령어 / USES Operator (0) | 2019.06.03 |
어셈블리 - JMP and LOOP Instructions (0) | 2019.06.03 |
어셈블리(ch5) - 라이브러리 프로시저 호출 (Linking to an External Library) (0) | 2019.06.03 |
어셈블리 - 지역 변수/ 프로시저 매개변수 넘기기/ 프로시저 프로토타입 (0) | 2019.06.01 |
Comments