어셈블리의 곱셈과 나눗셈

mydream의 이미지

스레드에 대해 공부하다가 자원의 경합(Data Racing) 문제에 부딪히게 됐습니다. 스레드 A와 스레드 B가 전역의 공유 자원에 동시에 접근하는 경우 스레드가 연산의 결과를 메모리에 다시 돌려주기 전에 스레드 B가 읽어서 연산을 하면 전역의 공유자원은 덮어 쓰이기 때문에 결국 스레드 A의 연산결과는 무시가 되는 문제가 생기더군요. 이런 문제를 막으려면 원자성이 확보되어야 한다고 합니다. 기계는 하나의 연산을 여러 단계로 나누어서 처리를 하는 경우가 있다고 하더군요. 이 작업이 더 이상 쪼개질 수 없는 단위로 간주해 버리면 원자성이 확보된다는 것인데. 그래서 기계어와 가까운 어셈블리를 배워보려고 관련 서적을 봤습니다. 그런데 덧셈과 뺄셈과 같은 이항 연산은 ADD, SUB와 같은 명령어로 제공이 되는데, 곱셈과 나눗셈은 없는 것으로 보입니다. MUL이라는 명령어는 제곱을 해주는 일항연산이고, 그로 봐서 DIV 명령어는 제곱근을 구하는 명령어로 추측이 되는데요. 이항 연산 관련 연산자로써 곱셈과 나눗셈을 제공하는 명령어는 없는지 궁금합니다. 어떤 명령어로 하면 될까요?

ifree의 이미지

MUL 과 DIV 가 이항 연산의 곱셈과 나눗셈이 맞습니다.
다만, 항 중 하나가 특정 레지스터에 입력되어야 합니다.

Necromancer의 이미지

사용할려는 대상 기계마다 다 틀려요.

x86 기준으로 곱셈, 나눗셈은 MUL,DIV 담당이고요. 인수는 1개만 넣습니다. 지정하지 않은 인수 하나는 AX레지스터 고정이고 여기에 미리 값을 넣어야 합니다.

Written By the Black Knight of Destruction

mydream의 이미지

나눗셈할 때에는 EAX에서 제수를 미리 읽어야 하는군요. 그리고 몫은 EAX, 나머지는 EDX로 설정이 되고요. 감사합니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.