{
    "componentChunkName": "component---src-templates-blog-template-js",
    "path": "/arm-7/",
    "result": {"data":{"cur":{"id":"d9173485-2d4f-5176-b242-8d7c4167dd98","html":"<h2 id=\"store-load-instruction\" style=\"position:relative;\"><a href=\"#store-load-instruction\" aria-label=\"store load instruction permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Store, Load Instruction</h2>\n<ul>\n<li>ARM 방식에서 메모리간 데이터 처리 명령이 불가능하다.</li>\n<li>레지스터와 메모리 간의 데이터 전송 명령어 를 사용해야 한다.</li>\n</ul>\n<h3 id=\"load\" style=\"position:relative;\"><a href=\"#load\" aria-label=\"load permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Load</h3>\n<ul>\n<li>Memory → Register</li>\n</ul>\n<h3 id=\"store\" style=\"position:relative;\"><a href=\"#store\" aria-label=\"store permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Store</h3>\n<ul>\n<li>Register → Memory</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 720px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 63.888888888888886%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAAsTAAALEwEAmpwYAAADQElEQVQ4y42PX2wTBRzHv+0twZnBpB2MLcPp8Lq2+2NdO1xdu7u11/au3rXXu7Zz4CSFOLa6GC0xiEP+FBh/jFkp3QLZiy/GBx+ILwbMli3ESMLcOoMBAuiDJpiR+OSDcSX9mYJPwsM+L5/8Xj75/jBllHGmWjZN1Q/ez/TsfWDrCN5vqnFcyGyNgMx/AJ0uKCMZ6O8fhH9oBN12P5rsgoHdqaC5RcbTVANio7+mdqN9wsslpwa6tDm+zn2E7OdepM2XNjWwUntcHs7vUtOnI4FULszqr1ianei18kb6mXDXnDbMbxs2cKyIPpMHIPMkpiEBG3ZgQEyB7pGRfMedDzuOZP60HUiPd4Q+k0O7V0PS7nt8b2S1s8muVHZcF3JVDx2HjFQ/DarOANgA0cwD9MJk469QTTWo29RWyz1HoROgwBhOdhyEpWvso6Rnhg65Tv4mOM4+cLou/v5Gz/Q/ttc+OPV5z2mQ8xRoyxe1VDXeUPn1Q5NcjY+bE7+MBfavBcN71tyN3u8pMD4y253yANgo9Z64qMZu0XvxRTqevklDg7cprt6kYT5/mVoP7H/kPHb46Fb56rvtAySG3vlru9m5iufrXw13u5S3+ruiu7gGb5AC4zsuv56uuztD8HnPTmjKDYoqSyVdWy7rymJJlW+QzOVmaLtSV3KfsbaaHH1bXnYPhnbqA6zJpcPQ2Ik+YRBy/9sINvEg4RMQgD7hK/iE/DFNL5Kur5Q0rVjW9JWSri8TJxTyE/4vQZYhsKZObLZ6EA+l0GJyAu31biPnUBivQ2F6t3mMFPzUsOfNb5iYeg0+fy6r/xfU9ZXyY2vL5PcXCj51AYfFr6t4c4+x7SWO6e+KMqzJxeBZhMPzTDg8B64/l1WUJYpEiqVIZLlcceXm+AsFSfoOonTl2YH/o2kLTCw2DyFwPptMFimZ/KmUTK6Un7hIQqBQUNVZRNWr6wtK4TlGkmbB8ZNZRVkkRVkqKcqP5YpleZE4Pl8QxSsIid+uLxiLXWdisR8gBKayicRtSiTuPEok7jxx/BYJgUuFqHoN0ejC+oKttn2MxbYPLax21GofJWvb6N/WttG1x7aPUAurn7fY9sJiTT0V/BdC+TxpLdl5IAAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"./STR-LDR.png\"\n        title=\"./STR-LDR.png\"\n        src=\"/static/8b591bf15ac594ca6b1327341bacef30/37523/STR-LDR.png\"\n        srcset=\"/static/8b591bf15ac594ca6b1327341bacef30/e9ff0/STR-LDR.png 180w,\n/static/8b591bf15ac594ca6b1327341bacef30/f21e7/STR-LDR.png 360w,\n/static/8b591bf15ac594ca6b1327341bacef30/37523/STR-LDR.png 720w,\n/static/8b591bf15ac594ca6b1327341bacef30/302a4/STR-LDR.png 1080w,\n/static/8b591bf15ac594ca6b1327341bacef30/4d383/STR-LDR.png 1195w\"\n        sizes=\"(max-width: 720px) 100vw, 720px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n    </span></p>\n<h3 id=\"단일-레지스터-데이터-전송\" style=\"position:relative;\"><a href=\"#%EB%8B%A8%EC%9D%BC-%EB%A0%88%EC%A7%80%EC%8A%A4%ED%84%B0-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%84%EC%86%A1\" aria-label=\"단일 레지스터 데이터 전송 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>단일 레지스터 데이터 전송</h3>\n<div class=\"gatsby-highlight\" data-language=\"wasm\"><pre class=\"language-wasm\"><code class=\"language-wasm\">&lt;LDR | STR> {&lt;cond>} {&lt;size>} Rd, &lt;address></code></pre></div>\n<ul>\n<li>LDR, STR, LDRB, STRB (size: WORD, BYTE)</li>\n</ul>\n<h2 id=\"pre-post-index-addressing\" style=\"position:relative;\"><a href=\"#pre-post-index-addressing\" aria-label=\"pre post index addressing permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Pre, Post Index Addressing</h2>\n<h3 id=\"pre-index-method\" style=\"position:relative;\"><a href=\"#pre-index-method\" aria-label=\"pre index method permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Pre-Index Method</h3>\n<ul>\n<li>데이터 전송 후 Base Register의 값은 변하지 않는다.</li>\n<li><code class=\"language-text\">!</code> 연산자를 붙이면 자동으로 주소를 업데이트 할 수 있다.</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 720px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 62.22222222222222%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAADj0lEQVQoz02Sa0xbBRiGv1OMIr2ec7i00BsF2lLs5RTa0xZGS2+HFlg55xRwLZtCnI7FiNZFq0jmjFkmgegv4xWHzGROs0umyRJnFiPGmMhlg01jZvxhxFWNBeMlDMhnWOLmmzx/nzw/Xgg1cERAH4a26lATFx38NRLJrPO9Dxdj0cFid9dwsbtrqGi1hNek0sZ1knSu07RrjaKcf2ko5kcvyUoZkgUD5Ybbs5FeiY30gItk3STtRDnlQAXtRMbbg95WHhl2N9qcHLYGB7DOGsYylR0V5S6soN3/MKRHBspyeF2TLdEqGeI+iiVAr2IIg4qBelVz7T0q2wWScl6iKdenJmPbnKUh9GWTNfqFXue9bjR6flOrHQWZrL6gUJp/L1c2fhenQtKlioOwrR8HjdwBdtoHgOZ3AN2nAC3HSzF+wTxF8vqUqr0Gd/L3W6E19zGE2cnJePDURiL84Wp37PSNZORcMbrr1WtwF5Rg5WsVf+vHnFVSu8lB+wzwYAUnGZSHYa+sozlTt/tPoeuhVa3GW3jfnn35Xf9eLQCoemKzJ/pTyziUvYoHhq9hOnUVU9y5NUw8ue9YdeqDrKN/qzOS/cVINV+BUR1fgm/MERZjQA4gN88w2dERUyL6Ql0veah1vBQRgYvNvN0nzKOQmr8p9n69leYvY7Lz9I0zbEhFULYKoCxOq9rvsJAtjXDYOABPCzmoiovweH0SMP5cCh85KV9tewxuLiNxYGQduM733hLFJeSFpU1eWNwWxRVMJM8WQAml6morgKIWrBo/WMgWgPO6/bmjgZFnA34hb6d9QYw+kym0j3o2Og7VPJ+YvnunMB6fnRaFJeT5xU2eX9gWhGVMJM4WavVQpnTLwGZIljRUshIr5ZFApzZ2Ph3et8K2iddTuvArmHyRKwafEDGS7wvU+CoBgI7GpmfT4mUU+MVNQVjYFsXlW4VVWrjXZDZAMDRx54dDjf3QkxsDePQBqDX5AGOHYb0jBxjNw8xFJPJPIcS5E2+K4iLy/MIGz89vicIVTCTP/PyfsP3/wgH7ALHryBECxoYIRX0LgdFx4o+OHPFN4CAxdRQlk8cQuM6Tx9PiCgrCDsuYFr/FZPKjoloHZXUWAwQ7pu4IL5YNwCXp/bf4pKwfPpdmYE6aAQVlhz17vpL09X8GLnfuJdY/UfT6Jr73+iZ+YP1TPzHN+XmqUlmq0TVAk334tvBfbDpCOZcsDYEAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"./Pre-Index.png\"\n        title=\"./Pre-Index.png\"\n        src=\"/static/edb0a1cf4950343e605475a6a2f0d13c/37523/Pre-Index.png\"\n        srcset=\"/static/edb0a1cf4950343e605475a6a2f0d13c/e9ff0/Pre-Index.png 180w,\n/static/edb0a1cf4950343e605475a6a2f0d13c/f21e7/Pre-Index.png 360w,\n/static/edb0a1cf4950343e605475a6a2f0d13c/37523/Pre-Index.png 720w,\n/static/edb0a1cf4950343e605475a6a2f0d13c/302a4/Pre-Index.png 1080w,\n/static/edb0a1cf4950343e605475a6a2f0d13c/5c98f/Pre-Index.png 1283w\"\n        sizes=\"(max-width: 720px) 100vw, 720px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n    </span></p>\n<h3 id=\"post-index-method\" style=\"position:relative;\"><a href=\"#post-index-method\" aria-label=\"post index method permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Post-Index Method</h3>\n<ul>\n<li>데이터 전송 후 Base Register와 Offset의 계산 결과가 Base Register에 적용된다.</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 720px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 54.44444444444444%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAADTElEQVQoz0WRXUxbBRzFT1tkCizU29J6NwprC7RQaUu/bSncllLarvf2g35gFdjU0Vo1LNssboDbuizEaEzmsvFgpjE+bIkLMzGaydtMlpnJ1oibyqNhiMtMNGMxRsb+Zvixk/wezssvJznAv+k282KXIQxOH3b0dWd+83kzy0F/boXrTq/0c8+ueF3Jn+VS06pMalpVyiy3FEzXPTVjK7GMBSxjkfznwRfNeckBy6hkn36ouk5mQqvc7me3O6lhu500Oo64/hy5e9NkdyfI0Z0kRaODaqQG2iozEst0zdQzRkgZ4yPhOV0BUwOv4TJ3BOOqEB6rNWir6/Rnax7XnVEw5o/0Wm6uo9V3vk3Te6VN619lFfZl+ZOWnxoYy+9NjG2/krFCyVjF/wvnNcXdk+6xsSue6eFfOgtP/Wkc37bkPJwecwynNHJ7sAsNW0YmFuFxHdsbDn1O0cjFNT765Rq/8yL19MxMREJzCIfOP1oYM8Q+GxEKV8Mdwrk7jleS39vyGV4Tmo9xz32nZl2ftte7VQCe8Pa+eyQev0Gx2OKDWHzxQSz2Lfn8s9Nh4WuMcZ9UBQw8VHIbQDNfgYhAQx/jhvlVzLvzm/2utZDFyxnE99wWp7M3Eeg/XUqnK5RKVdb/4ToF+k9NDUUvgaADJ+uBWvZQeJMwC4DYafaqfp865UyznbXuaho4mLiVmBAXh26Lg/4L6OubPSDw1yker6wn4pX7An+NvL5TBztHL4G072zj6j3SJpmtFnt0g5I3dDnkWf7kLs/IPbs78WtBFSxT+HD2D9/+3FL3eBeA6oj3raPZ2DV66fnK/fxwZSMpLNB08L0PKi3J4ova5ErAnb7TKLdeAFR6gG0CGpq2Wixh5W5DSnm6ZbCe4serNvylurPecs2HbxM47sSEwC+QwC+sPyTKf0NR38kyAVvEKler4Ey32WXPNAI7OoDGHYCiGe3OCBLmQZxoTYL4Y9jwl4AyiaLCZQyEzpSymR9pk+wSZTM/kH/g/aliZG7zXJ7L4Wm5E+DVIUSagwgoejFsyYgypkHR0WYexJfxl+91eMyHJCbzm9C17yoaTZNrRtPkstE8udxpOnRX1z66t8VYgln3QtVOU1xklblEfwNcsCR+nlcu6wAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"./Post-Index.png\"\n        title=\"./Post-Index.png\"\n        src=\"/static/2e1c6aba4f11fc0f66518ccdb0f02d83/37523/Post-Index.png\"\n        srcset=\"/static/2e1c6aba4f11fc0f66518ccdb0f02d83/e9ff0/Post-Index.png 180w,\n/static/2e1c6aba4f11fc0f66518ccdb0f02d83/f21e7/Post-Index.png 360w,\n/static/2e1c6aba4f11fc0f66518ccdb0f02d83/37523/Post-Index.png 720w,\n/static/2e1c6aba4f11fc0f66518ccdb0f02d83/302a4/Post-Index.png 1080w,\n/static/2e1c6aba4f11fc0f66518ccdb0f02d83/07a9c/Post-Index.png 1440w,\n/static/2e1c6aba4f11fc0f66518ccdb0f02d83/95e59/Post-Index.png 1460w\"\n        sizes=\"(max-width: 720px) 100vw, 720px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n    </span></p>\n<ul>\n<li>연산 결과 Base Register인 r1 Register의 값이 0x100+0xc 의 값으로 변경된다.</li>\n</ul>\n<div class=\"table-of-contents\">\n<ul>\n<li>\n<p><a href=\"#store-load-instruction\">Store, Load Instruction</a></p>\n<ul>\n<li><a href=\"#load\">Load</a></li>\n<li><a href=\"#store\">Store</a></li>\n<li><a href=\"#%EB%8B%A8%EC%9D%BC-%EB%A0%88%EC%A7%80%EC%8A%A4%ED%84%B0-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%84%EC%86%A1\">단일 레지스터 데이터 전송</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"#pre-post-index-addressing\">Pre, Post Index Addressing</a></p>\n<ul>\n<li><a href=\"#pre-index-method\">Pre-Index Method</a></li>\n<li><a href=\"#post-index-method\">Post-Index Method</a></li>\n</ul>\n</li>\n</ul>\n</div>","excerpt":"Store, Load Instruction ARM 방식에서 메모리간 데이터 처리 명령이 불가능하다. 레지스터와 메모리 간의 데이터 전송 명령어 를 사용해야 한다. Load Memory → Register Store Register → Memory  단일 레지스터 데이터 전송 LDR, STR, LDRB, STRB (size: WORD, BYTE) Pre, Post Index Addressing Pre-Index Method 데이터 전송 후 Base Register의 값은 변하지 않는다.  연산자를 붙이면 자동으로 주소를 업데이트 할 수 있다.  Post-Index Method 데이터 전송 후 Base Register와 Offset의 계산 결과가 Base Register에 적용된다.  연산 결과 Base Register인 r1 Register의 값이 0x100+0xc 의 값으로 변경된다. Store, Load Instruction Load Store 단일 레지스터 데이터 전송 Pre,…","frontmatter":{"date":"February 10, 2021","title":"ARM data Transfer (POST,Pre-index Method, STR/LDR Instruction)","categories":"ARM","author":"Zer0Luck","emoji":"🥔"},"fields":{"slug":"/arm-7/"}},"next":{"id":"e62d7b61-0989-52a1-8d5f-80625f86c8e8","html":"<h1 id=\"ldr-rd-const\" style=\"position:relative;\"><a href=\"#ldr-rd-const\" aria-label=\"ldr rd const permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>LDR Rd, =const</h1>\n<ul>\n<li><code class=\"language-text\">LDR Rd, =const</code> 의사 명령은 단일 명령어에서 32비트 숫자 상수를 생성할 수 있다.</li>\n<li>이 의사 명령어를 사용하여 MOV, MVN 명령어 범위를 벗어난 상수를 생성한다.</li>\n</ul>\n<h3 id=\"ldr-의사명령은-특정-상수에-대해-가장-효율적인-코드를-생성한다\" style=\"position:relative;\"><a href=\"#ldr-%EC%9D%98%EC%82%AC%EB%AA%85%EB%A0%B9%EC%9D%80-%ED%8A%B9%EC%A0%95-%EC%83%81%EC%88%98%EC%97%90-%EB%8C%80%ED%95%B4-%EA%B0%80%EC%9E%A5-%ED%9A%A8%EC%9C%A8%EC%A0%81%EC%9D%B8-%EC%BD%94%EB%93%9C%EB%A5%BC-%EC%83%9D%EC%84%B1%ED%95%9C%EB%8B%A4\" aria-label=\"ldr 의사명령은 특정 상수에 대해 가장 효율적인 코드를 생성한다 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>LDR 의사명령은 특정 상수에 대해 가장 효율적인 코드를 생성한다.</h3>\n<ul>\n<li>MOV, MVN 명령어를 사용하여 상수를 생성 할 수 있는 경우 어셈블러는 적절한 명령어를 생성한다.</li>\n<li>MOV, MVN 명령어로 상수를 생성할 수 없는 경우 어셈블러는 다음을 수행한다.\n<ul>\n<li>값을 literal pool (상수 값을 유지하기 위해 코드에 포함된 메모리의 일부에 배치한다.)</li>\n<li>Literal pool에서 상수를 읽는 프로그램 기준 주소로 LDR 명령어를 생성한다.</li>\n</ul>\n</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"cpp\"><pre class=\"language-cpp\"><code class=\"language-cpp\">LDR      rn<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span>pc<span class=\"token punctuation\">,</span> #offset to literal pool<span class=\"token punctuation\">]</span>  <span class=\"token punctuation\">;</span> load <span class=\"token keyword\">register</span> n with one word\n                                                <span class=\"token punctuation\">;</span> from the address <span class=\"token punctuation\">[</span>pc <span class=\"token operator\">+</span> offset<span class=\"token punctuation\">]</span></code></pre></div>\n<ul>\n<li>어셈블러에서 생성한 LDR 명령어 범위 내에 리터럴 풀이 있는지 확인해야 한다.</li>\n</ul>\n<h3 id=\"literal-pools-배치\" style=\"position:relative;\"><a href=\"#literal-pools-%EB%B0%B0%EC%B9%98\" aria-label=\"literal pools 배치 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Literal pools 배치</h3>\n<ul>\n<li>어셈블러는 각 섹션의 끝에 리터럴 풀을 배치한다.</li>\n<li>이들은 다음 섹션의 시작 부분에 있는 AREA instruction  또는 어셈블리 끝에 있는 END instruction 의해 정의된다.</li>\n<li>포함된 파일 끝에 있는 END는 섹션의 끝을 알리지 않는다.</li>\n<li>큰 섹션에서 기본 리터럴 풀은 하나 이상의 LDR 명령어 범위를 벗어날 수 있다.</li>\n<li>PC에서 상수까지의 오프셋은 다음과 같다.\n<ul>\n<li>ARM 상태에서 4KB 미만이지만 어느 방향으로 가능</li>\n<li>Thumb 상태에서 앞으로 1KB 미만</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"ldr-rd--const-의사-명령어에서-상수를-리터럴-풀에-배치해야-하는-경우-어셈블러는-다음과-같다\" style=\"position:relative;\"><a href=\"#ldr-rd--const-%EC%9D%98%EC%82%AC-%EB%AA%85%EB%A0%B9%EC%96%B4%EC%97%90%EC%84%9C-%EC%83%81%EC%88%98%EB%A5%BC-%EB%A6%AC%ED%84%B0%EB%9F%B4-%ED%92%80%EC%97%90-%EB%B0%B0%EC%B9%98%ED%95%B4%EC%95%BC-%ED%95%98%EB%8A%94-%EA%B2%BD%EC%9A%B0-%EC%96%B4%EC%85%88%EB%B8%94%EB%9F%AC%EB%8A%94-%EB%8B%A4%EC%9D%8C%EA%B3%BC-%EA%B0%99%EB%8B%A4\" aria-label=\"ldr rd  const 의사 명령어에서 상수를 리터럴 풀에 배치해야 하는 경우 어셈블러는 다음과 같다 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>LDR Rd, = const 의사 명령어에서 상수를 리터럴 풀에 배치해야 하는 경우 어셈블러는 다음과 같다.</h3>\n<ul>\n<li>상수를 사용할 수 있고 이전 리터럴 풀에서 주소를 지정할 수 있는지 확인하며 기존 상수를 처리한다.</li>\n<li>상수를 아직 사용할 수 없는 경우 next literal pool에 배치하려고 한다.</li>\n</ul>\n<h3 id=\"next-literal-pool\" style=\"position:relative;\"><a href=\"#next-literal-pool\" aria-label=\"next literal pool permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>next literal pool</h3>\n<ul>\n<li>범위를 벗어난 경우 어셈블러는 오류 메시지를 생성한다.</li>\n<li>해당 경우 LTORG instruction을 사용하여 코드에 추가 리터럴 풀을 배치해야 한다.</li>\n<li>LTORG는 실패한 LDR 의사 명령어 뒤에 4KB(ARM) 또는 1KB (Thumb) 내에 배치한다.</li>\n</ul>\n<h3 id=\"ltorg-instruction\" style=\"position:relative;\"><a href=\"#ltorg-instruction\" aria-label=\"ltorg instruction permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>LTORG Instruction</h3>\n<ul>\n<li>어셈블러는 모든 코드 섹션의 끝에 현재 리터럴 풀을 어셈블한다.</li>\n<li>코드 섹션 끝은 AREA 다음 섹션의 시작 부분 또는 어셈블리의 끝 부분에 있는 지시문에 의해 결정된다.</li>\n<li>이러한 기본 리터럴 풀은 때때로 일부의 범위를 벗어날 수 있다. LDR, LDFD, LDFS 의사 명령어</li>\n<li>LTORG 리터럴 풀이 범위 내에서 어셈블되었는지 확인한다.</li>\n</ul>\n<h3 id=\"프로세서가-명령으로-실행을-시도하지-않는-곳에-리터럴-풀을-배치해야-한다\" style=\"position:relative;\"><a href=\"#%ED%94%84%EB%A1%9C%EC%84%B8%EC%84%9C%EA%B0%80-%EB%AA%85%EB%A0%B9%EC%9C%BC%EB%A1%9C-%EC%8B%A4%ED%96%89%EC%9D%84-%EC%8B%9C%EB%8F%84%ED%95%98%EC%A7%80-%EC%95%8A%EB%8A%94-%EA%B3%B3%EC%97%90-%EB%A6%AC%ED%84%B0%EB%9F%B4-%ED%92%80%EC%9D%84-%EB%B0%B0%EC%B9%98%ED%95%B4%EC%95%BC-%ED%95%9C%EB%8B%A4\" aria-label=\"프로세서가 명령으로 실행을 시도하지 않는 곳에 리터럴 풀을 배치해야 한다 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>프로세서가 명령으로 실행을 시도하지 않는 곳에 리터럴 풀을 배치해야 한다.</h3>\n<ul>\n<li>무조건 분기 명령어 뒤에 배치하거나 서브 루틴 끝에 반환 명령어 뒤에 배치한다.</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"cpp\"><pre class=\"language-cpp\"><code class=\"language-cpp\">AREA     Loadcon<span class=\"token punctuation\">,</span> CODE<span class=\"token punctuation\">,</span> READONLY\n        ENTRY                              \nstart   BL       func1                     <span class=\"token punctuation\">;</span> Branch 첫 번째 서브루틴\n        BL       func2                     <span class=\"token punctuation\">;</span> Branch 두 번째 서브루틴\nstop    MOV      r0<span class=\"token punctuation\">,</span> #<span class=\"token number\">0x18</span>                 <span class=\"token punctuation\">;</span> angel_SWIreason_ReportException\n        LDR      r1<span class=\"token punctuation\">,</span> <span class=\"token operator\">=</span><span class=\"token number\">0x20026</span>              <span class=\"token punctuation\">;</span> ADP_Stopped_ApplicationExit\n        SWI      <span class=\"token number\">0x123456</span>                  <span class=\"token punctuation\">;</span> ARM semihosting SWI\nfunc1\n        LDR      r0<span class=\"token punctuation\">,</span> <span class=\"token operator\">=</span><span class=\"token number\">42</span>                   <span class=\"token punctuation\">;</span> <span class=\"token operator\">=</span><span class=\"token operator\">></span> MOV R0<span class=\"token punctuation\">,</span> #<span class=\"token number\">42</span>\n        LDR      r1<span class=\"token punctuation\">,</span> <span class=\"token operator\">=</span><span class=\"token number\">0x55555555</span>           <span class=\"token punctuation\">;</span> <span class=\"token operator\">=</span><span class=\"token operator\">></span> LDR R1<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span>PC<span class=\"token punctuation\">,</span> #offset to\n                                           <span class=\"token punctuation\">;</span> Literal Pool <span class=\"token number\">1</span><span class=\"token punctuation\">]</span>\n        LDR      r2<span class=\"token punctuation\">,</span> <span class=\"token operator\">=</span><span class=\"token number\">0xFFFFFFFF</span>           <span class=\"token punctuation\">;</span> <span class=\"token operator\">=</span><span class=\"token operator\">></span> MVN R2<span class=\"token punctuation\">,</span> #<span class=\"token number\">0</span>\n        MOV      pc<span class=\"token punctuation\">,</span> lr\n        LTORG                              <span class=\"token punctuation\">;</span> Literal Pool <span class=\"token number\">1</span> contains\n                                           <span class=\"token punctuation\">;</span> literal Ox55555555\nfunc2\n        LDR      r3<span class=\"token punctuation\">,</span> <span class=\"token operator\">=</span><span class=\"token number\">0x55555555</span>           <span class=\"token punctuation\">;</span> <span class=\"token operator\">=</span><span class=\"token operator\">></span> LDR R3<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span>PC<span class=\"token punctuation\">,</span> #offset to\n                                           <span class=\"token punctuation\">;</span> Literal Pool <span class=\"token number\">1</span><span class=\"token punctuation\">]</span>\n        <span class=\"token punctuation\">;</span> LDR r4<span class=\"token punctuation\">,</span> <span class=\"token operator\">=</span><span class=\"token number\">0x66666666</span>              <span class=\"token punctuation\">;</span> 만약에 주석 처리가 아니라면\n                                           <span class=\"token punctuation\">;</span> 실패한다<span class=\"token punctuation\">.</span> 왜냐하면 두 개의 리터럴 풀이기 때문\n                                           <span class=\"token punctuation\">;</span> 범위에 벗어난다<span class=\"token punctuation\">.</span>\n        MOV      pc<span class=\"token punctuation\">,</span> lr\nLargeTable\n        SPACE    <span class=\"token number\">4200</span>                      <span class=\"token punctuation\">;</span> Starting at the current location<span class=\"token punctuation\">,</span>\n                                           <span class=\"token punctuation\">;</span> clears a <span class=\"token number\">4200</span> byte area of memory\n                                           <span class=\"token punctuation\">;</span> to zero\n        END                                <span class=\"token punctuation\">;</span> Literal Pool <span class=\"token number\">2</span> is empty</code></pre></div>\n<div class=\"table-of-contents\">\n<ul>\n<li><a href=\"#ldr-%EC%9D%98%EC%82%AC%EB%AA%85%EB%A0%B9%EC%9D%80-%ED%8A%B9%EC%A0%95-%EC%83%81%EC%88%98%EC%97%90-%EB%8C%80%ED%95%B4-%EA%B0%80%EC%9E%A5-%ED%9A%A8%EC%9C%A8%EC%A0%81%EC%9D%B8-%EC%BD%94%EB%93%9C%EB%A5%BC-%EC%83%9D%EC%84%B1%ED%95%9C%EB%8B%A4\">LDR 의사명령은 특정 상수에 대해 가장 효율적인 코드를 생성한다.</a></li>\n<li><a href=\"#literal-pools-%EB%B0%B0%EC%B9%98\">Literal pools 배치</a></li>\n<li><a href=\"#ldr-rd--const-%EC%9D%98%EC%82%AC-%EB%AA%85%EB%A0%B9%EC%96%B4%EC%97%90%EC%84%9C-%EC%83%81%EC%88%98%EB%A5%BC-%EB%A6%AC%ED%84%B0%EB%9F%B4-%ED%92%80%EC%97%90-%EB%B0%B0%EC%B9%98%ED%95%B4%EC%95%BC-%ED%95%98%EB%8A%94-%EA%B2%BD%EC%9A%B0-%EC%96%B4%EC%85%88%EB%B8%94%EB%9F%AC%EB%8A%94-%EB%8B%A4%EC%9D%8C%EA%B3%BC-%EA%B0%99%EB%8B%A4\">LDR Rd, = const 의사 명령어에서 상수를 리터럴 풀에 배치해야 하는 경우 어셈블러는 다음과 같다.</a></li>\n<li><a href=\"#next-literal-pool\">next literal pool</a></li>\n<li><a href=\"#ltorg-instruction\">LTORG Instruction</a></li>\n<li><a href=\"#%ED%94%84%EB%A1%9C%EC%84%B8%EC%84%9C%EA%B0%80-%EB%AA%85%EB%A0%B9%EC%9C%BC%EB%A1%9C-%EC%8B%A4%ED%96%89%EC%9D%84-%EC%8B%9C%EB%8F%84%ED%95%98%EC%A7%80-%EC%95%8A%EB%8A%94-%EA%B3%B3%EC%97%90-%EB%A6%AC%ED%84%B0%EB%9F%B4-%ED%92%80%EC%9D%84-%EB%B0%B0%EC%B9%98%ED%95%B4%EC%95%BC-%ED%95%9C%EB%8B%A4\">프로세서가 명령으로 실행을 시도하지 않는 곳에 리터럴 풀을 배치해야 한다.</a></li>\n</ul>\n</div>","frontmatter":{"date":"February 10, 2021","title":"ARM LDR Rd, =const (constant)","categories":"ARM","author":"Zer0Luck","emoji":"🥑"},"fields":{"slug":"/arm-8/"}},"prev":{"id":"365629df-f85a-55e7-b25c-6af021e4a887","html":"<h1 id=\"load-store-다중-레지스터-명령\" style=\"position:relative;\"><a href=\"#load-store-%EB%8B%A4%EC%A4%91-%EB%A0%88%EC%A7%80%EC%8A%A4%ED%84%B0-%EB%AA%85%EB%A0%B9\" aria-label=\"load store 다중 레지스터 명령 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Load, Store 다중 레지스터 명령</h1>\n<ul>\n<li>ARM, Thumb 명령어 집합에는 메모리에서 여러 레지스터를 로드하고 저장하는 명령어 가 포함되어 있다.</li>\n<li>다중 레지스터 전송 명령어는 여러 레지스터의 내용을 메모리로부터 효율적으로 이동하는 방법을 제공한다.</li>\n<li>블록 복사, 서브루틴 진입 및 종료시 스택 작업에 가장 자주 사용된다.</li>\n<li>일련의 단일 데이터 전송 명령어 대신 다중 레지스터 전송 명령어를 사용하면 여러 이득이 있다.\n<ul>\n<li>코드의 크기를 작게 할 수 있다.</li>\n<li>여러 명령 fetch가 아닌 단일 명령 fetch overhead</li>\n<li>캐시되지 않은 ARM 프로세서에서 로드 또는 다중 저장에 의해 전송되는 첫 번째 워드는 항상 비 순차자적 메모리주기이지만 전송되는 모든 후속 word는 순차 메모리 주기 일 수 있다.</li>\n<li>대부분의 시스템에서 순차적 메모리 주기가 더 빠르다.</li>\n</ul>\n</li>\n</ul>\n<h2 id=\"arm-ldm-stm-명령\" style=\"position:relative;\"><a href=\"#arm-ldm-stm-%EB%AA%85%EB%A0%B9\" aria-label=\"arm ldm stm 명령 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>ARM LDM, STM 명령</h2>\n<ul>\n<li>여러 명령어를 로드, 저장 하면 단일 명령어를 사용하여 메모리에서 16개의 범용 레지스터의 하위 집합을 로드, 저장 한다.</li>\n</ul>\n<h3 id=\"ldm\" style=\"position:relative;\"><a href=\"#ldm\" aria-label=\"ldm permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>LDM</h3>\n<div class=\"gatsby-highlight\" data-language=\"cpp\"><pre class=\"language-cpp\"><code class=\"language-cpp\">LDM <span class=\"token punctuation\">{</span>cond<span class=\"token punctuation\">}</span> address<span class=\"token operator\">-</span>mode Rn<span class=\"token punctuation\">{</span><span class=\"token operator\">!</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span> reg<span class=\"token operator\">-</span>list<span class=\"token punctuation\">{</span><span class=\"token operator\">^</span><span class=\"token punctuation\">}</span>\n\n<span class=\"token number\">4</span> addressing modes<span class=\"token operator\">:</span>\nLDMIA <span class=\"token operator\">/</span> STMIA\nLDMIB <span class=\"token operator\">/</span> STMIA\nLDMDA <span class=\"token operator\">/</span> STMDA\nLDMDB <span class=\"token operator\">/</span> STMDB</code></pre></div>\n<p><strong>cond</strong></p>\n<ul>\n<li>선택적 조건 코드 부분</li>\n</ul>\n<p><strong>address-mode</strong></p>\n<ul>\n<li>명령어의 주소 지정 모드를 지정한다.\n<ul>\n<li>IA : 이후 증가</li>\n<li>IB : 이전에 증가</li>\n<li>DA : 이후 감수</li>\n<li>DB : 이전에 감소</li>\n</ul>\n</li>\n</ul>\n<p><strong>Rn</strong></p>\n<ul>\n<li>로드 작업의 기본 레지스터이다.</li>\n<li>해당 레지스터에 저장된 주소는 로드 작업의 시작 주소이다.</li>\n<li>r15(pc) 를 기준 레지스터로 지정하면 안된다.</li>\n</ul>\n<p>!</p>\n<ul>\n<li>기본 레지스터 쓰기를 지정하낟.</li>\n<li>이것이 지정되면 기본 레지스터의 주소가 전송 후 업데이트 된다.</li>\n<li>레지스터 목록의 각 레지스터에 대해 한 단어씩 감소하거나 증가한다.</li>\n</ul>\n<p><strong>Register-list</strong></p>\n<ul>\n<li>중괄호로 묶인 기호 레지스터 이름 및 레지스터 범위의 쉼표로 구분된 목록이다.</li>\n<li>목록에 적어도 하나의 레지스터가 있어야 한다.</li>\n<li>레지스터 범위는 대시로 지정한다.</li>\n<li><code class=\"language-text\">{r0, r1, r4-r6, pc}</code></li>\n<li>기본 레지스터 Rn이 레지스터 목록에 있으면 쓰기, 저장을 하면 안된다.</li>\n</ul>\n<p><strong>^</strong></p>\n<ul>\n<li>사용자 또는 시스템 모드에서 이 옵션을 사용하면 안된다.</li>\n<li>STM 명령어의 구문은 ^ 옵션의 효과에 대한 일부 세부 사항을 제외하고 정확히 일치한다.</li>\n</ul>\n<h2 id=\"ldm-stm으로-스택-구현\" style=\"position:relative;\"><a href=\"#ldm-stm%EC%9C%BC%EB%A1%9C-%EC%8A%A4%ED%83%9D-%EA%B5%AC%ED%98%84\" aria-label=\"ldm stm으로 스택 구현 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>LDM, STM으로 스택 구현</h2>\n<ul>\n<li>\n<p>로드 , 저장 여려 명령어는 기본 레지스터를 업데이트 할 수 있다.</p>\n</li>\n<li>\n<p>스택 연산의 경우 기본 레지스터는 일반적으로 스택 포인터 r13이다.</p>\n</li>\n<li>\n<p>즉, 여러 명령어로드 및 저장을 사용하여 단일 명령어에서 여러 레지스터에 대한 푸시 및 팝 작업을 구현할 수 있다.</p>\n</li>\n<li>\n<p>여러 유형의 스택에서 여러로드 및 저장 명령어를 사용할 수 있다.</p>\n</li>\n</ul>\n<p><strong>내림 차순, 오름차순</strong></p>\n<ul>\n<li>스택은 높은 주소에서 시작해서 하위주소로 진행하거나 상위 주소에서 시작해서 상위주소로 진행하여 아래쪽으로 성장한다.</li>\n</ul>\n<p><strong>Full, Empty</strong></p>\n<ul>\n<li>\n<p>스택 포인터는 스택의 미지막 항목(전체 스택) 또는 스택의 다음 여유 공간(빈 스택)을 가리킬 수 있다.</p>\n</li>\n<li>\n<p>증가, 감소 대신 접미사 앞뒤에 스택 지향 접미사를 사용할 수 있다.</p>\n</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"cpp\"><pre class=\"language-cpp\"><code class=\"language-cpp\">Stack type\t\t\t\tPush\t\t\tPop\nFull descending\t\t<span class=\"token function\">STMFD</span> <span class=\"token punctuation\">(</span>STMDB<span class=\"token punctuation\">)</span>\t<span class=\"token function\">LDMFD</span> <span class=\"token punctuation\">(</span>LDMIA<span class=\"token punctuation\">)</span>\nFull ascending\t\t<span class=\"token function\">STMFA</span> <span class=\"token punctuation\">(</span>STMIB<span class=\"token punctuation\">)</span>\t<span class=\"token function\">LDMFA</span> <span class=\"token punctuation\">(</span>LDMDA<span class=\"token punctuation\">)</span>\nEmpty descending\t<span class=\"token function\">STMED</span> <span class=\"token punctuation\">(</span>STMDA<span class=\"token punctuation\">)</span>\t<span class=\"token function\">LDMED</span> <span class=\"token punctuation\">(</span>LDMIB<span class=\"token punctuation\">)</span>\nEmpty ascending\t\t<span class=\"token function\">STMEA</span> <span class=\"token punctuation\">(</span>STMIA<span class=\"token punctuation\">)</span>\t<span class=\"token function\">LDMEA</span> <span class=\"token punctuation\">(</span>LDMDB<span class=\"token punctuation\">)</span></code></pre></div>\n<ul>\n<li>연습1</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"wasm\"><pre class=\"language-wasm\"><code class=\"language-wasm\">LDMXX r10, {r0, r1, r4}\nSTMXX r10, {r0, r1, r4}</code></pre></div>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 720px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 85%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAARCAYAAADdRIy+AAAACXBIWXMAAAsTAAALEwEAmpwYAAAEgklEQVQ4y2XUe2hbVRwH8LMHKqtt1zXJknVJ7vuRm9ykyU2a3KQ39948apvsVbraMat11na2Psbmi+EeumV0oM3KsA0yhjCoY0UQda7zL//wD51k4hwSNsRsykRQtKh43W73k6RjQz3wOd9zfv8c+MHvoGiLjMQ1UeRbHUEjZA7NTpxAxuHZ5Yb8LHWre+9Fc6RomDunfjXHjy+Yw5ML5nPTC+aumd/MnVO/38rv+2lR2c/sQwjBaViWjwQQOoENodpqqm1tWfTJ4EEE/qdabiu7JxbTLxYXd7xeWhw9Nl23442l3Dk1fXt0aubmQ3ve/KO997FzCN1/bRrQCsGKEOQuLUMIrTwKgMKYZnOTnR/RvH6e5PVzNkZ5txWLnbFg8pwFi81Z8FrKc1Y8PrfGFZxjI+NzmdyZs9mu2Xmv+MT51rW+eeRsCryvdvb/0BHaeN3eKL7nxOKLBJMEnE4CSSeBYtR/YTgdOE8GMCICmcxrMD52DUZHvoVI9HlosQqA8MbAq0rHllk5uOGUszkwgVOKyfApoDkdGP6/UsB60sB7u4BkZdDTh+Dxoauwffs3EJR2Q+taAZClUURxfQD5Qjl037bscjeZmGZ4vUTz+kwt6zypEuPRl9Rr6RLFxkpi+5ZSLP5yKSrvL3l820oWu38GxSwJp2ulwLoRh/MOOeAiEl9TrHaFZNUKxWr/Q/PpCsnEKlJkVyWX/7jS3fNBpV0arbgJqWJ1RCpo3YPiJV0dAFV5GGwN3gsuLH7TTXbCEgXunZcQtAZOTIKkdgCeefoGjI9/D5p+AOzr28FqDwPiGoMbOsXck4ovN4SvDj7iJhJ/0rx+m2JVs45TTZrT72I9GZPiZDMWf8ns6/vC7O39zOyIvWBiVNS0reswka1JRLy/C9GeFOKXBxBGKYcFMXvEF9hSENu3Frz+3gLvzRY8vswd2QLnTRV4b77gDz5a8AcHC77A5gIn6EesDukwYptDWRFXtwdwrZ9oDfe78MQCySRvpjNvG319nxsbN35ocELeIBnFoFjNoDndYPiUQfOaQXHJep1kkwbBqIbVIRmorUG8IgVyEBS7oa0p8BVGdP7txOOwdetZGBv7EYaHy8B78+DEZcBIBXBKAYJOAkGrQDAq4FQSMEoBF56A1rVBQL41Yaeryc86HxBwwhYOuvDEVZKNX1eSx6s9PfPVTPZMlfXkqhSbrNKcXmX41F00r1cpVqsjGbVqdUjfoVUNHGI7csglaAgAEEbFJ6XI2LGo/EpRiuwpckJXkRP0Iu/NFLm6dJET7vCmi6xw7251SJPI3eDfGw3kT4Z93W85m0OH1rsl6MmfhMHByzAw8Cl4fH1A0AkgWQ1IVq1PEM3r9aQ4DUhGrau1weYIA1q3yne+Q9rwS8jf83Nbc/CsE5P+2rT5NAwP34ChocsgiP3gJuWlntXmuzbTrLaE0+uP1NR6a7GHAME7UPttVhwEQF5X2u4iohfkxMEvU+lTZSVZKnPCpjLDq2WGT5UZXi+zntRdjCdVpjitTHNamWLVixZ7qPwP/ab1GqYdugoAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"./MULTI_LOAD_STORE.png\"\n        title=\"./MULTI_LOAD_STORE.png\"\n        src=\"/static/9592e6e7b28b19027b81b686ba543e17/37523/MULTI_LOAD_STORE.png\"\n        srcset=\"/static/9592e6e7b28b19027b81b686ba543e17/e9ff0/MULTI_LOAD_STORE.png 180w,\n/static/9592e6e7b28b19027b81b686ba543e17/f21e7/MULTI_LOAD_STORE.png 360w,\n/static/9592e6e7b28b19027b81b686ba543e17/37523/MULTI_LOAD_STORE.png 720w,\n/static/9592e6e7b28b19027b81b686ba543e17/709cb/MULTI_LOAD_STORE.png 1034w\"\n        sizes=\"(max-width: 720px) 100vw, 720px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n    </span></p>\n<ul>\n<li>연습 2</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"cpp\"><pre class=\"language-cpp\"><code class=\"language-cpp\">STMFD    r13<span class=\"token operator\">!</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span>r0<span class=\"token operator\">-</span>r5<span class=\"token punctuation\">}</span>  <span class=\"token punctuation\">;</span> Full 내림차순 스택으로 PUSH\nLDMFD    r13<span class=\"token operator\">!</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span>r0<span class=\"token operator\">-</span>r5<span class=\"token punctuation\">}</span>  <span class=\"token punctuation\">;</span> Full 내림차순 스택에서 POP</code></pre></div>\n<h3 id=\"중첩-된-서브-루틴에-대한-스택-레지스터\" style=\"position:relative;\"><a href=\"#%EC%A4%91%EC%B2%A9-%EB%90%9C-%EC%84%9C%EB%B8%8C-%EB%A3%A8%ED%8B%B4%EC%97%90-%EB%8C%80%ED%95%9C-%EC%8A%A4%ED%83%9D-%EB%A0%88%EC%A7%80%EC%8A%A4%ED%84%B0\" aria-label=\"중첩 된 서브 루틴에 대한 스택 레지스터 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>중첩 된 서브 루틴에 대한 스택 레지스터</h3>\n<ul>\n<li>스택 작업은 서브 루틴 진입 및 종료시 매우 유용하다.</li>\n<li>서브 루틴을 시작할 때 필요한 작업 레지스터를 스택에 저장할 수 있다.</li>\n<li>종료할 때 다시 POP off 할 수 있다.</li>\n<li>또한 링크 레지스터가 진입시 스택으로 푸시되면 반환 주소를 잃지 않고 추가 서브 루틴 호출을 안전하게 수행할 수 있다.</li>\n<li>이렇게 하면 lr 를 POP 한 다음 해당 값을 PC로 이동하는 대신 종료시 스택에서 PC를 POP 하여 서브 루틴으로 복귀할 수 있다.</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"cpp\"><pre class=\"language-cpp\"><code class=\"language-cpp\">subroutine  STMFD   sp<span class=\"token operator\">!</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span>r5<span class=\"token operator\">-</span>r7<span class=\"token punctuation\">,</span>lr<span class=\"token punctuation\">}</span> <span class=\"token punctuation\">;</span> 작업 레지스터 및 lr 푸시\n            <span class=\"token punctuation\">;</span> code\n            BL      somewhere_else\n            <span class=\"token punctuation\">;</span> code\n             LDMFD   sp<span class=\"token operator\">!</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span>r5<span class=\"token operator\">-</span>r7<span class=\"token punctuation\">,</span>pc<span class=\"token punctuation\">}</span> <span class=\"token punctuation\">;</span> 작업 레지스터 및 pc POP</code></pre></div>\n<div class=\"table-of-contents\">\n<ul>\n<li>\n<p><a href=\"#arm-ldm-stm-%EB%AA%85%EB%A0%B9\">ARM LDM, STM 명령</a></p>\n<ul>\n<li><a href=\"#ldm\">LDM</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"#ldm-stm%EC%9C%BC%EB%A1%9C-%EC%8A%A4%ED%83%9D-%EA%B5%AC%ED%98%84\">LDM, STM으로 스택 구현</a></p>\n<ul>\n<li><a href=\"#%EC%A4%91%EC%B2%A9-%EB%90%9C-%EC%84%9C%EB%B8%8C-%EB%A3%A8%ED%8B%B4%EC%97%90-%EB%8C%80%ED%95%9C-%EC%8A%A4%ED%83%9D-%EB%A0%88%EC%A7%80%EC%8A%A4%ED%84%B0\">중첩 된 서브 루틴에 대한 스택 레지스터</a></li>\n</ul>\n</li>\n</ul>\n</div>","frontmatter":{"date":"February 10, 2021","title":"ARM Load,Store Multi Register Instruction","categories":"ARM","author":"Zer0Luck","emoji":"🍆"},"fields":{"slug":"/arm-9/"}},"site":{"siteMetadata":{"siteUrl":"https://zer0luck.kr","comments":{"utterances":{"repo":"dnsdudrla97/dnsdudrla97.github.io"}}}}},"pageContext":{"slug":"/arm-7/","nextSlug":"/arm-8/","prevSlug":"/arm-9/"}},
    "staticQueryHashes": ["1073350324","1956554647","2938748437"]}