看來嵌入彙編還是挺有魅力的,讓我來晒晒今天實驗的程式碼吧!(也算文章湊數吧,無所謂了怎麼說都行了!)
阿新 • • 發佈:2019-01-06
這是執行效果:
程式碼:這段程式碼是記憶體linux0.11中學來的,語義大概是從後面搜尋每位元組,如果找到1就把它改成2,然後返回改動處前一個位元組的地址。(可以看到顯示字串的起始地址是0x404004,後面顯示的地址為404009,因為是從後往前檢索)
#include <stdio.h> #define edi_val(edi) ({ \ register unsigned int __res; \ __asm__ __volatile__("std; repne; scasb; \ movb $2, 1(%%edi); \ cld" \ :"=D"(__res) \ :"0"(edi),"a"(1)); \ __res; \ }) int main(void) { static char str[10] = {1,1,1,1,1,1,1,3,3,3}; //這裡的static等價於彙編中的db .byte for(int i = 9; i >= 0; i--) printf("%d\t", str[i]); printf("\n0x%x\n", str); printf("0x%x\n", edi_val(str + 10 - 1)); for(int i = 9; i >= 0; i--) printf("%d\t", str[i]); }