今天第一次接觸匯編,從進(jìn)制轉(zhuǎn)換開始復(fù)習(xí)。
其實(shí)這些東西在大學(xué)的時(shí)候就應(yīng)該打好基礎(chǔ)。
常見的進(jìn)制
- 二進(jìn)制,由0、1組成,逢二進(jìn)一
- 八進(jìn)制,由0-7八個數(shù)字組成,逢八進(jìn)一
- 十進(jìn)制,由0-9十個數(shù)字組成,逢十進(jìn)一
- 十六進(jìn)制,由0-9,A-F十六個字符組成逢十六進(jìn)一
只要理解每個進(jìn)制的進(jìn)一規(guī)則,那運(yùn)算起來就了如指掌。
以八進(jìn)制舉例:
逢八進(jìn)一,當(dāng)數(shù)字大于等于8時(shí),進(jìn)一位,如果10進(jìn)制的逢十進(jìn)一。
以下均為八進(jìn)制數(shù):
4 + 6 = 12
6 + 6 = 14
277 + 333 = 632
位、字節(jié)、原碼、反碼、補(bǔ)碼:
計(jì)算機(jī)最小運(yùn)算單位是bit,位。
byte表示一個字節(jié),1byte = 8bit
Java中是以補(bǔ)碼來表示二進(jìn)制
Java中聲明一個byte類型的變量,其大小范圍是-128 ~ 127
byte b = 127; // ok
byte c = 128; // error
原因是byte類變量只有一個字節(jié),即上面聲明的b變量,只在內(nèi)存中占用8位,并且最高位是符號位。即:
//最高位符號位: 0表示整數(shù),1表示負(fù)數(shù)
//最大正數(shù)
byte max = 127; //內(nèi)存:0111 1111(補(bǔ)碼)
//最小負(fù)數(shù)
byte min = -128; //內(nèi)存:1000 0000(補(bǔ)碼)
//有一點(diǎn)需要注意的是,該二進(jìn)制表示的是補(bǔ)碼
//介紹一下原碼、反碼、補(bǔ)碼
//原碼:二進(jìn)制定點(diǎn)表示法,即最高位為符號位,“0”表示正,“1”表示負(fù),其余位表示數(shù)值的大小
//反碼:正數(shù)的反碼與其原碼相同;負(fù)數(shù)的反碼是對其原碼逐位取反,但符號位除外
//補(bǔ)碼:正數(shù)的補(bǔ)碼與其原碼相同;負(fù)數(shù)的補(bǔ)碼是在其反碼的末位加1,另外計(jì)算一個數(shù)的補(bǔ)碼,可取其絕對值的原碼,每一位取反并加1。
通用寄存機(jī)
編譯器在運(yùn)行過程中,生成的變量會存在三個地方:CPU(寄存器位于其中),內(nèi)存,硬盤
32位CPU中(05年以后的電腦,大多都64位的)有3種寄存器:
- 8位
- 16位
- 32位(包含8種通用寄存器,EIP不是通用寄存器)
- EAX
- ECX
- EDX
- EBX
- ESP
- EBP
- ESI
- EDI
指令學(xué)習(xí)
MOV EAX,1 //將立即數(shù)(1)存到指定的寄存器(EAX)