캐리플레그에 관해서 질문이요...

4ipperz의 이미지

안녕하세요...지금 어셈블리어 공부하는 중인데

mov ax, -5
sub ax, +125
라고 하면 캐리 플래그가 0이고

mov ax, -5
add ax, -125
라고 하면 캐리 플래그가 1인데 왜그런건가요?

고수들, 도와주세요

cookielounge의 이미지

carry flag는 연산시 자리올림이나 borrow가 생기면 set됩니다.
-5 - 125시에는 borrow가 발생하기때문에 set되는겁니다.

또한 -128 ~ 127의 범위안에 표시할 수 없으므로 Overflow flag도 set 될겁니다.

seaofvision의 이미지

윗분께서 잘못 답변하신게 있는데요,
ax는 16비트이므로 오버플로우 플래그는 지정되지 않습니다.
부호를 고려한 범위는 -32,768 ~ +32,767이 되기에 (결과값은 -135니깐 부호를 고려한 범위를 충족하겠죠?)
Overflow flag는 Set되지 않습니다. (OF = 0)

다음으로 작성자님께서 의문을 가지는 add와 sub 연산은
본질적으로 결과가 동일하게 나타나는 산술연산에 대해서 CF가 정반대로 도출됩니다.
이게 무슨 말이냐 하면...

좀 더 쉽게 알아보기 위해서 예제를 직접 들어서 설명하겠습니다.

그 전에 편의상 먼저 언급하신 연산을 1번, 후자를 2번으로 언급하겠습니다.
우선, 결과값 자체로만 따지면 1, 2번 연산의 결과값은 둘 다 -130으로 동일한데요,
다만, -5 + (-125)와 -5 - 125는 커다란 차이가 있습니다.

1번을 봅시다.
125 앞에 마이너스가 있으며 add 연산을 통해 처리됩니다.
125를 보수 처리 시키기 때문에 16진으로 환산하면 다음과 같이 되겠죠?
0xFFFF FFFB (-5)
0xFFFF FF83 (-125)
위의 두 16진수를 순수하게 더하면, 16비트 밖으로 자리올림(Carry)이 발생합니다.
결과값: 0x 1 FFFF FF7E
이때, 캐리된 bit는 자연스럽게 CF으로 넘어가서 Set 됩니다.
그렇기 때문에, 1번 연산에서는 CF가 셋팅되는 것이구요

2번의 경우,
sub연산은 실질적인 계산이 위와 동일한 방법으로 이루어지지만,
단, 한가지 차이점은 연산이 종료된 뒤에 캐리플래그를 비트반전 시키는 작업을 합니다.
(sub 명령어 구현의 특성상 그렇습니다.)

결론적으로 말하자면, 1 sub 2와 1 add (-2)를 할때
두연산의 결과로 나오는 캐리플래그 값은 정반대로 뜬다고 보시면 됩니다.

1 add 2 = 3 (CF = 0)
1 sub (-2) = 3 (CF = 1)

3 add 5 = 8 (CF = 0)
3 sub (-5) = 8 (CF = 1)

직접 테스트해보세요.

seaofvision의 이미지

부호를 고려한 범위는 -32,768 ~ +32,767이 되기에 (결과값은 -135니깐 부호를 고려한 범위를 충족하겠죠?)
-> -135가 아니라 -130입니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.