{"id":1305,"date":"2018-10-25T11:25:43","date_gmt":"2018-10-25T03:25:43","guid":{"rendered":"http:\/\/www.yusian.com\/blog\/?p=1305"},"modified":"2018-10-25T11:25:43","modified_gmt":"2018-10-25T03:25:43","slug":"%e5%87%bd%e6%95%b0%e8%b0%83%e7%94%a8%e5%8e%9f%e7%90%86-%e5%ae%8c%e5%96%84%e7%af%87%e6%a0%88%e5%b8%a7","status":"publish","type":"post","link":"https:\/\/www.yusian.com\/blog\/assembler\/2018\/10\/25\/1125431305.html","title":{"rendered":"\u51fd\u6570\u8c03\u7528\u539f\u7406&#8211;\u5b8c\u5584\u7bc7(\u6808\u5e27)"},"content":{"rendered":"<p>1\u3001\u53c2\u8003\u94fe\u63a5\uff1a<br \/>\n1.1 <a href=\"http:\/\/www.yusian.com\/blog\/assembler\/2018\/10\/24\/173913.html\" rel=\"noopener\" target=\"_blank\">\u51fd\u6570\u8c03\u7528\u539f\u7406\u2013\u53c2\u6570\u7bc7<\/a><br \/>\n1.2 <a href=\"http:\/\/www.yusian.com\/blog\/assembler\/2018\/10\/24\/234103.html\" rel=\"noopener\" target=\"_blank\">\u51fd\u6570\u8c03\u7528\u539f\u7406\u2013\u5c40\u90e8\u53d8\u91cf<\/a><\/p>\n<p>2\u3001\u5c40\u90e8\u53d8\u91cf\u7a7a\u95f4\u5206\u914d\u540e\u6ca1\u6709\u521d\u59cb\u5316\uff0c\u53ef\u80fd\u4f1a\u51fa\u73b0\u5f02\u5e38\u8bbf\u95ee\u800c\u51fa\u73b0\u4e0d\u53ef\u9884\u77e5\u7684\u9519\u8bef\uff0c\u56e0\u4e3a\u5206\u914d\u7684\u4e34\u65f6\u7a7a\u95f4\u5fc5\u987b\u521d\u59cb\u5316\uff1b<br \/>\n2.1\u3001\u5c06\u6bcf\u4e2a\u5b57\u8282\u90fd\u521d\u59cb\u5316\u4e3aCC\u5176\u4e2d\u4e00\u79cd\u5b89\u5168\u7b56\u7565\uff0c\u56e0\u4e3aCC\u5728\u6c47\u7f16\u6307\u4ee4\u4e2d\u4e3aint 3\uff0c\u5373\u4e2d\u65ad\u6307\u4ee4\u3002<br \/>\n2.2\u3001stosb\/stosw\u6307\u5b9a\u80fd\u5c06es:di\u6307\u5411\u7684\u7a7a\u95f4\u5199\u5165ax\u5bc4\u5b58\u5668\u4e2d\u7684\u503c\uff0c\u5e76\u5728\u6267\u884c\u7ed3\u675f\u540e\u5c06di\u81ea\u52a01\u5b57\u8282\/2\u5b57\u8282<br \/>\n2.3\u3001rep\u4f1a\u5faa\u73af\u6307\u5b9a\u540e\u4e00\u6761\u6307\u4ee4\uff0c\u5faa\u73af\u6b21\u6570\u4ececx\u5bc4\u5b58\u5668\u4e2d\u53d6\uff0c\u5982\u679c\u4e3a0\u5219\u9000\u51fa\u5faa\u73af<\/p>\n<p>3\u3001\u6c47\u7f16\u4ee3\u7801\u5b9e\u73b0<!--more--><\/p>\n<pre lang=\"asm\" line=\"1\">assume cs:code, ds:data, ss:stack\r\n\r\nstack segment\r\n    db 20h dup(1)\r\nstack ends\r\n\r\ndata segment\r\n    db 20h dup(2)\r\ndata ends\r\n\r\ncode segment\r\nstart:\r\n    ;\u521d\u59cb\u5316\r\n    mov ax, stack\r\n    mov ss, ax\r\n    mov sp, 20h\r\n    mov ax, data\r\n    mov ds, ax  \r\n    ;----\u4e1a\u52a1\u4ee3\u7801----start\r\n    ;(\u51fd\u6570\u5c40\u90e8\u53d8\u91cf\u5b9e\u73b0) \r\n    push 3344h\r\n    push 4455h\r\n    call sum;\u8ba1\u7b97\u7ed3\u679c\u4fdd\u5b58\u5728ax\u4e2d\r\n    add sp, 4 \r\n    ;----\u4e1a\u52a1\u4ee3\u7801----end\r\n    ;\u9000\u51fa             \r\n    mov ah, 4ch\r\n    int 21h\r\nsum:\r\n    ;1\u3001\u4fdd\u62a4\u5bc4\u5b58\u5668\r\n    push bp;\u4fdd\u62a4bp\r\n    mov bp, sp;\u4fdd\u62a4sp\r\n    sub sp, 10h;\u7a7a\u51fa10\u4e2a\u5b57\u8282\u7ed9\u5c40\u90e8\u53d8\u91cf\u4f7f\u7528\r\n    ;\u4fdd\u62a4\u5176\u4ed6\u5bc4\u5b58\u5668\r\n    push bx\r\n    push si\r\n    push di \r\n    \r\n    ;2\u3001\u5c40\u90e8\u53d8\u91cf\u7a7a\u95f4\u5b89\u5168\u521d\u59cb\u5316\r\n    ;stosw:\u5c06ax\u7684\u503c\u62f7\u8d1d\u5230es:di\u4e2d\uff0c\u540c\u65f6di\u81ea+2(stosb\u81ea+1)\r\n    ;2.1\u3001\u521d\u59cb\u5316\u5185\u5bb9\r\n    mov ax, 0cccch;\u4f7f\u7528cccc\u6765\u521d\u59cb\u5316\uff0c\u56e0\u4e3acc\u5bf9\u5e94\u7684\u6c47\u7f16\u6307\u4ee4\u4e3aint 3\uff0c\u5373\u4e2d\u65ad\u6307\u4ee4\r\n    ;2.2\u3001\u8bbe\u7f6ees\u503c\r\n    ;\u5c06ss\u7684\u503c\u8d4b\u7ed9es\r\n    mov bx, ss\r\n    mov es, bx\r\n    ;2.3\u3001\u8bbe\u7f6edi\u503c \r\n    ;\u5c06di\u7684\u503c\u8bbe\u7f6e\u4e3abp-10h\uff0c\u56de\u5230\u5c40\u90e8\u53d8\u91cf\u7a7a\u95f4\u7684\u6700\u5c0f\u7aef(\u56e0\u4e3adi\u4f1a\u81ea\u52a0)\r\n    mov di, bp\r\n    sub di, 10h\r\n    ;2.4\u3001\u5faa\u73af\u8d4b\u503c\u521d\u59cb\u5316\u6240\u6709\u5c40\u90e8\u53d8\u91cf\u7a7a\u95f4\r\n    ;rep \u5faa\u73af\u6267\u884c\uff0ccx\u4e3a\u5faa\u73af\u6b21\u6570\uff0c\u5faa\u73af\u4e00\u6b21\u81ea-1\r\n    mov cx, 10h;\u5faa\u73af\u6b21\u6570\u4e3a\u5c40\u90e8\u53d8\u91cf\u7a7a\u95f4\u7684\u5927\u5c0f(\u5b57\u64cd\u4f5c\u5219\u96642)\r\n    rep stosb\r\n    \r\n    ;----\u4e1a\u52a1\u4ee3\u7801------start   \r\n    ;\u53d6\u53c2\u6570\u5e76\u8ba1\u7b97\uff0c\u7531\u4e8epush bp\u5360\u7528\u4e862\u4e2a\u5b57\u8282\uff0c\u53c2\u6570\u4ecebp+4\u5f00\u59cb\r\n    mov ax, [bp+6]\r\n    add ax, [bp+4]\r\n    mov [bp-2], 2324h;\u5c40\u90e8\u53d8\u91cf1\r\n    mov [bp-4], 3435h;\u5c40\u90e8\u53d8\u91cf2  \r\n    ;----\u4e1a\u52a1\u4ee3\u7801-------end\r\n    \r\n    ;3\u3001\u6062\u590d\u51fd\u6570\u8c03\u7528\u524d\u5404\u6570\u503c\uff0c\u91ca\u653e\u7a7a\u95f4\r\n    ;\u6062\u590d\u53d7\u4fdd\u62a4\u7684\u5bc4\u5b58\u5668\r\n    pop di\r\n    pop si\r\n    pop bx\r\n    \r\n    mov sp, bp;\u6062\u590dsp\r\n    pop bp;\u6062\u590dbp\r\n    ret \r\ncode ends\r\nend start<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.yusian.com\/blog\/wp-content\/uploads\/2018\/10\/Parallels-\u56fe\u7247-1-300x153.png\" alt=\"\" width=\"600\" height=\"306\" class=\"alignnone size-medium wp-image-1308\" srcset=\"https:\/\/www.yusian.com\/blog\/wp-content\/uploads\/2018\/10\/Parallels-\u56fe\u7247-1-300x153.png 300w, https:\/\/www.yusian.com\/blog\/wp-content\/uploads\/2018\/10\/Parallels-\u56fe\u7247-1-768x393.png 768w, https:\/\/www.yusian.com\/blog\/wp-content\/uploads\/2018\/10\/Parallels-\u56fe\u7247-1-1024x523.png 1024w, https:\/\/www.yusian.com\/blog\/wp-content\/uploads\/2018\/10\/Parallels-\u56fe\u7247-1-624x319.png 624w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/p>\n<p>4\u3001C++\u6e90\u4ee3\u7801\u53ca\u53cd\u6c47\u7f16\u7ed3\u679c<\/p>\n<pre lang=\"cpp\" line=\"1\">\/\/ VCTest.cpp : Defines the entry point for the console application.\r\n\/\/\r\n\r\n#include \"stdafx.h\"\r\n\r\nint sum(int a, int b)\r\n{\r\n\tint c = 20;\r\n\tint d = 30;\r\n\treturn a + b;\r\n}\r\nint main(int argc, char* argv[])\r\n{\r\n\tsum(2, 3);\r\n\treturn 0;\r\n}<\/pre>\n<pre lang=\"asm\" line=\"1\">6:    int sum(int a, int b)\r\n7:    {\r\n0040D7E0   push        ebp;\u4fdd\u62a4bp\r\n0040D7E1   mov         ebp,esp;\u4fdd\u62a4bp\r\n0040D7E3   sub         esp,48h;\u5206\u914d\u5c40\u90e8\u53d8\u91cf\u4e34\u65f6\u7a7a\u95f4\r\n0040D7E6   push        ebx;\u4fdd\u62a4bx\r\n0040D7E7   push        esi;\u4fdd\u62a4si\r\n0040D7E8   push        edi;\u4fdd\u62a4di\r\n;\u5faa\u73af\u521d\u59cb\u5316\u5c06\u5c40\u53d8\u91cf\u4e3aCCCC\r\n0040D7E9   lea         edi,[ebp-48h]\r\n0040D7EC   mov         ecx,12h\r\n0040D7F1   mov         eax,0CCCCCCCCh\r\n0040D7F6   rep stos    dword ptr [edi]\r\n8:        int c = 20;\r\n0040D7F8   mov         dword ptr [ebp-4],14h\r\n9:        int d = 30;\r\n0040D7FF   mov         dword ptr [ebp-8],1Eh\r\n10:       return a + b;\r\n0040D806   mov         eax,dword ptr [ebp+8]\r\n0040D809   add         eax,dword ptr [ebp+0Ch];\u51fd\u6570\u8fd4\u56de\u503c\u4fdd\u5b58\u5728ax\u4e2d\r\n11:   }\r\n;\u6062\u590d\u53d7\u4fdd\u62a4\u7684\u5bc4\u5b58\u5668\uff0c\u4e0e\u4fdd\u62a4\u65f6\u7684\u987a\u5e8f\u76f8\u53cd(\u56e0\u4e3a\u6808)\r\n0040D80C   pop         edi;\u6062\u590ddi\r\n0040D80D   pop         esi;\u6062\u590dsi\r\n0040D80E   pop         ebx;\u6062\u590dbx\r\n0040D80F   mov         esp,ebp;\u6062\u590dsp\r\n0040D811   pop         ebp;\u6062\u590dbp\r\n0040D812   ret;\u8fd4\u56de<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>1\u3001\u53c2\u8003\u94fe\u63a5\uff1a 1.1 \u51fd\u6570\u8c03\u7528\u539f\u7406\u2013\u53c2\u6570\u7bc7 1.2 \u51fd\u6570\u8c03\u7528\u539f\u7406\u2013\u5c40\u90e8\u53d8\u91cf 2\u3001\u5c40\u90e8\u53d8\u91cf\u7a7a\u95f4\u5206\u914d\u540e\u6ca1\u6709\u521d\u59cb\u5316\uff0c\u53ef\u80fd\u4f1a\u51fa\u73b0\u5f02\u5e38\u8bbf\u95ee\u800c\u51fa\u73b0\u4e0d\u53ef\u9884\u77e5\u7684\u9519\u8bef\uff0c\u56e0\u4e3a\u5206\u914d\u7684\u4e34\u65f6\u7a7a\u95f4\u5fc5\u987b\u521d\u59cb\u5316\uff1b 2.1\u3001\u5c06\u6bcf\u4e2a\u5b57\u8282\u90fd\u521d\u59cb\u5316\u4e3aCC\u5176\u4e2d\u4e00\u79cd\u5b89\u5168\u7b56\u7565\uff0c\u56e0\u4e3aCC\u5728\u6c47\u7f16\u6307\u4ee4\u4e2d\u4e3aint 3\uff0c\u5373\u4e2d\u65ad\u6307\u4ee4\u3002 2.2\u3001stosb\/stosw\u6307\u5b9a\u80fd\u5c06es:di\u6307\u5411\u7684\u7a7a\u95f4\u5199\u5165ax\u5bc4\u5b58\u5668\u4e2d\u7684\u503c\uff0c\u5e76\u5728\u6267\u884c\u7ed3\u675f\u540e\u5c06di\u81ea\u52a01\u5b57\u8282\/2\u5b57\u8282 2.3\u3001rep\u4f1a\u5faa\u73af\u6307\u5b9a\u540e\u4e00\u6761\u6307\u4ee4\uff0c\u5faa\u73af\u6b21\u6570\u4ececx\u5bc4\u5b58\u5668\u4e2d\u53d6\uff0c\u5982\u679c\u4e3a0\u5219\u9000\u51fa\u5faa\u73af 3\u3001\u6c47\u7f16\u4ee3\u7801\u5b9e\u73b0<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[124],"tags":[132,133,121],"class_list":["post-1305","post","type-post","status-publish","format-standard","hentry","category-assembler","tag-132","tag-133","tag-121"],"_links":{"self":[{"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/posts\/1305","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/comments?post=1305"}],"version-history":[{"count":0,"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/posts\/1305\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/media?parent=1305"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/categories?post=1305"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/tags?post=1305"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}