首頁 考試吧論壇 Exam8視線 考試商城 網(wǎng)絡(luò)課程 面授課程 模擬考試 實(shí)用文檔 繽紛校園 英語學(xué)習(xí)
2010考研 | 自學(xué)考試 | 成人高考 | 專 升 本 | 法律碩士 | MBA/MPA | 中 科 院
四六級 | 商務(wù)英語 | 公共英語 | 職稱日語 | 職稱英語 | 博思 | 口譯筆譯 | GRE GMAT | 日語 | 托福
雅思 | 專四專八 | 新概念 | 自考英語 | 零起點(diǎn)英、、、、韓語 | 在職申碩英語
在職攻碩英語 | 成人英語三級
等級考試 | 水平考試 | 微軟認(rèn)證 | 思科認(rèn)證 | Oracle認(rèn)證 | Linux認(rèn)證
公務(wù)員 | 報(bào)關(guān)員 | 報(bào)檢員 | 外銷員 | 司法考試 | 導(dǎo)游考試 | 教師資格 | 國際商務(wù)師 | 跟單員
單證員 | 物流師 | 價(jià)格鑒證師 | 銀行從業(yè)資格 | 證券從業(yè)資格 | 人力資源管理師 | 管理咨詢師
期貨從業(yè)資格 | 社會(huì)工作者
會(huì)計(jì)職稱 | 注會(huì)CPA | 經(jīng)濟(jì)師 | 統(tǒng)計(jì)師 | 注冊稅務(wù)師 | 評估師 | 精算師 | 高會(huì) | ACCA | 審計(jì)師
法律顧問 | 會(huì)計(jì)證
建造師一級、二級) | 造價(jià)師 | 監(jiān)理師 | 安全師 | 咨詢師 | 結(jié)構(gòu)師 | 建筑師 | 安全評價(jià)師
估價(jià)師房地產(chǎn)估價(jià)土地估價(jià)) | 設(shè)備監(jiān)理師 | 巖土工程師 | 質(zhì)量資格 | 房地產(chǎn)經(jīng)紀(jì)人 | 造價(jià)員
投資項(xiàng)目管理 | 土地代理人 | 環(huán)保師 | 環(huán)境影響評價(jià) | 物業(yè)管理師 | 城市規(guī)劃師 | 公路監(jiān)理師
公路造價(jià)工程師 | 招標(biāo)師
執(zhí)業(yè)護(hù)士 | 執(zhí)業(yè)醫(yī)師 | 執(zhí)業(yè)藥師 | 衛(wèi)生資格
 蕭雨 
您現(xiàn)在的位置: 考試吧(Exam8.com) > 軟件水平考試 > 復(fù)習(xí)資料 > 正文

Casl匯編語言輔導(dǎo)(二)

二、匯編語言常用子程序
1、拆字與拼字: 
【例1】將 GR0 中的四位 BCD 碼從高到低依次存放到 GR2 所指的四個(gè)內(nèi)存單元中。
START
LEAGR3,4;循環(huán)計(jì)數(shù)器
L1STGR0,REG;保護(hù)其余幾位 BCD 碼
ANDGR0,C000F;屏蔽高 3 位,留下最低 1 位 BCD 碼
STGR0,3,GR2;將此位 BCD 碼存放到 GR2 所指第四個(gè)內(nèi)存單元
LDGR0,REG;恢復(fù)其余幾位 BCD 碼
SRLGR0,4;將已處理過的此位 BCD 碼移出
LEAGR2.-1,GR2;地址指針減 1
LEAGR3,-1,GR3;循環(huán)計(jì)數(shù)器減 1
JNZL1;未處理完,繼續(xù)
RET
C000FDC#000F ;十六進(jìn)制常數(shù),屏蔽屏蔽高 3 位 BCD 碼用
REGDS1 ;暫存單元 
END

 
【例2】將存放在 GR2 所指的四個(gè)內(nèi)存單元中的四位 BCD 碼依從高到低順序壓縮到 GR0 中 。
START
LEAGR0,0;GR0 清 0
LEAGR3,4;循環(huán)計(jì)數(shù)器
L1SLLGR0,4;將已處理過的 BCD 碼移到高位
LDGR1,0,GR2;GR1 用作臨時(shí)工作寄存器
ANDGR1,C000F;屏蔽高 12 位
STGR1,0,GR2;對內(nèi)存單元中的 BCD 碼預(yù)處理
ADDGR0,0,GR2;將已處理過的此位 BCD 碼加到 GR0 低位
LEAGR2.1,GR2;地址指針指向下一位 BCD 碼
LEAGR3,-1,GR3;循環(huán)計(jì)數(shù)器減 1
JNZL1;未處理完,繼續(xù)
RET
C000FDC#000F ;十六進(jìn)制常數(shù),屏蔽高 12 位二進(jìn)制數(shù)
END

2、數(shù)字與 ASCII 碼之間的相互轉(zhuǎn)換: 
十進(jìn)制數(shù)字 0~9 的 ASCII 碼是 30H~39H ,所以只要將十進(jìn)制數(shù)(BCD 碼)加 30H 就是對應(yīng)的 ASCII 碼。
十六進(jìn)制數(shù)轉(zhuǎn)換成 ASCII 碼可分成兩段, 0~9 的 ASCII 碼是 30H~39H ,即加 30H ;A~F 的ASCII 碼是 41H~45H ,即加 37 H。
【例1】將 GR0 中的四位 BCD 碼化成 ASCII 碼從高到低依次存放到字符串變量 STR 中。
START
LEAGR2,3;相對于 STR 首址的地址指針
LEAGR3,4;循環(huán)計(jì)數(shù)器
L1STGR0,REG;保護(hù)其余幾位 BCD 碼
ANDGR0,C000F;屏蔽高 3 位,留下最低 1 位 BCD 碼
ADDGR0,C30;轉(zhuǎn)換成 ASCII 碼
STGR0,STR,GR2;將 ASCII 碼存放到 GR2 所指第四個(gè)內(nèi)存單元
LDGR0,REG;恢復(fù)其余幾位 BCD 碼
SRLGR0,4;將已處理過的此位 BCD 碼移出
LEAGR2.-1,GR2;地址指針減 1
LEAGR3,-1,GR3;循環(huán)計(jì)數(shù)器減 1
JNZL1;未處理完,繼續(xù)
RET
C000FDC#000F ;十六進(jìn)制常數(shù),屏蔽高 3 位 BCD 碼用
C30DC#30 ;十六進(jìn)制常數(shù) 30 
STRDS4 
REGDS1 ;暫存單元 
END

 
【例2】將 GR0 中的 16 位二進(jìn)制數(shù)化成四位十六進(jìn)制數(shù) ASCII 碼從高到低依次存放到字符串變量 STR 中。
START
LEAGR2,3;相對于 STR 首址的地址指針
LEAGR3,4;循環(huán)計(jì)數(shù)器
L1STGR0,REG;保護(hù)其余幾位二進(jìn)制數(shù)
ANDGR0,C000F;屏蔽高 12 位,留下最低 4 位二進(jìn)制數(shù)
CPLGR0,C0A;< 10 否?
JMIL2;< 10 跳過加 7 ,只加 30H
ADDGR0,C7;≥ 10,加 30H 前先加上 7
L2 ADDGR0,C30;加上 30H
STGR0,STR,GR2;將 ASCII 碼存放到 GR2 所指第四個(gè)內(nèi)存單元
LDGR0,REG;恢復(fù)其余幾位二進(jìn)制數(shù)
SRLGR0,4;將已處理過的此 4 位二進(jìn)制數(shù)移出
LEAGR2.-1,GR2;地址指針減 1
LEAGR3,-1,GR3;循環(huán)計(jì)數(shù)器減 1
JNZL1;未處理完,繼續(xù)
RET
C000FDC#000F ;十六進(jìn)制常數(shù),屏蔽屏蔽高 12 位二進(jìn)制數(shù)
C30DC#30 ;十六進(jìn)制常數(shù) 30 
C0ADC#0A ;十六進(jìn)制常數(shù) 0A 
C7DC7 ;常數(shù) 7 
STRDS4 
REGDS1 ;暫存單元 
END

 
【例3】將字符串 STR 中的四位十六進(jìn)制數(shù)的 ASCII 碼化成 16 位二進(jìn)制數(shù)放到 GR0 中 。
START
LEAGR0,0;GR0 清 0
LEAGR2,0;相對于 STR 首址的地址指針
LEAGR3,4;循環(huán)計(jì)數(shù)器
L1SLLGR0,4;將已處理過的十六進(jìn)制數(shù)移到高位
LDGR1,STR,GR2;GR1 用作臨時(shí)工作寄存器
ANDGR1,C00FF;屏蔽高 8 位
SUBGR0,C30;減去30H
CPLGR0,C0A;< 10 否?
JMIL2;< 10 ,完成轉(zhuǎn)換
SUBGR0,C7;≥ 10,再減去 7
L2 STGR1,STR,GR2;將 STR 中的 ASCII 碼轉(zhuǎn)換成十六進(jìn)制數(shù)
ADDGR0,STR,GR2;將此位十六進(jìn)制數(shù)加到 GR0 低位
LEAGR2.1,GR2;地址指針指向下一位 ASCII 碼
LEAGR3,-1,GR3;循環(huán)計(jì)數(shù)器減 1
JNZL1;未處理完,繼續(xù)
RET
C00FFDC#00FF ;十六進(jìn)制常數(shù),屏蔽高 8 位用
C30DC#30 ;十六進(jìn)制常數(shù) 30 
C0ADC#0A ;十六進(jìn)制常數(shù) 0A 
C7DC7 ;常數(shù) 7 
STRDS4 
END

3、利用加減法及移位指令做乘法: 
1)左移指令可將操作數(shù)乘 2 的整數(shù)次方(2、4、8、16);右移指令可將操作數(shù)除以 2 的整數(shù)次方。 
若操作數(shù)是無符號數(shù),用邏輯移位指令;若操作數(shù)是有符號數(shù),用算術(shù)移位指令。 
【例1】將 GR0 中的二進(jìn)制數(shù)乘以 8。
SLLGR0,3

【例2】將 GR0 中的帶符號二進(jìn)制數(shù)除以 4。
SRAGR0,2

2)將移位指令和加減法結(jié)合起來可完成乘數(shù)不是 2 的整數(shù)次方的乘法運(yùn)算。 
【例1】將 GR0 中的二進(jìn)制數(shù)乘以 10。
START
SLLGR0,1
STGR0,REG
SLLGR0,2
ADDGR0,REG
RET
REGDS1
END

【例2】將 GR0 中的二進(jìn)制數(shù)乘以 7。
START
STGR0,REG
SLLGR0,3
SUBGR0,REG
RET
REGDS1
END

4、二進(jìn)制數(shù)與十進(jìn)制數(shù)的轉(zhuǎn)換 
1)二化十:
將二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)的一種常用算法是將被轉(zhuǎn)換的二進(jìn)制數(shù)依次被 10i( 對 16 位二進(jìn)制數(shù),i為 4、3、2、1、0)除,所得的商即為該十進(jìn)制數(shù)位的值,其余數(shù)再被下一個(gè) 10i 除。一般用減法代替除法,即一邊減 10i,一邊計(jì)數(shù)器加 1,直到不夠減再進(jìn)行下一位 10i-1。以求得十進(jìn)制數(shù)的各位數(shù)。
例如:一個(gè)相當(dāng)于十進(jìn)制數(shù) 34635 的二進(jìn)制數(shù),可先用 10000 去減,可減 3 次,得萬位數(shù)是 3;再用 1000 去減,得千位數(shù)是 4;……
【例1】將 GR0 中的二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)的ASCII 碼放入字符串 STR 中。
START
LEAGR1,0;減數(shù)表及字符串指針 
LEAGR2,5;循環(huán)計(jì)數(shù)器 
L1 LEAGR3,48;該十進(jìn)制位的數(shù)碼預(yù)置 0 的 ASCII 碼
L2LEAGR3,1,GR3;數(shù)碼位的 ASCII 碼加 1
SUBGR0,SNO,GR1;操作數(shù)減去 10i  
JPZL2;夠減,繼續(xù) 
ADDGR0,SNO,GR1;不夠減,操作數(shù)及數(shù)碼位的 ASCII 碼恢復(fù) 
LEAGR3,-1,GR3
STGR3,STR,GR1;轉(zhuǎn)換好的該位 ASCII 碼存入結(jié)果字符串 
LEAGR1,1,GR1;地址指針加 1 
LEAGR2,-1,GR2;循環(huán)計(jì)數(shù)器減 1 
JNZL1;未結(jié)束,繼續(xù)下一位 
RET
SNODC10000
DC1000
DC100
DC10
DC1
STRDS5 ;轉(zhuǎn)換結(jié)果字符串
END

1)十化二:
將十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)的算法基礎(chǔ)是下面公式:
N = (Dn-1*10n-1+Dn-2*10n-2+……+D1*101+D0*100
  = ((…((Dn-1*10+Dn-2)*10+……+D1)*10+D0)*10
可以用循環(huán)程序?qū)崿F(xiàn)此公式,*10 可用移位及加法指令完成。
【例2】將存放在字符串 STR 中的五位十進(jìn)制數(shù)(<65536)的 ASCII 碼轉(zhuǎn)換成二進(jìn)制數(shù)放到 GR0 中 。
START
LEAGR0,0;轉(zhuǎn)換結(jié)果寄存器清 0 
LEAGR2,5;循環(huán)計(jì)數(shù)器 
LEAGR1,0;地址指針(偏移量)
L1 SLLGR0,1;轉(zhuǎn)換結(jié)果*10,先乘以 2
STGR0,REG;暫存 2*X
SLLGR0,2;2*X*4=8*X
ADDGR0,REG;8*X + 2*X
LDGR3,STR,GR1;取一位 ASCII 碼
ANDGR3,C000F;將 ASCII 碼變成 BCD 碼
STGR3,REG;結(jié)果暫存 
ADDGR0,REG;將新的一位 BCD 碼加到轉(zhuǎn)換結(jié)果中 
LEAGR1,1,GR1;地址指針加 1 
LEAGR2,-1,GR2;循環(huán)計(jì)數(shù)器減 1 
JNZL1;未結(jié)束,繼續(xù)下一位 
RET
C000FDC#000F ;十六進(jìn)制常數(shù),屏蔽高 12 位二進(jìn)制數(shù)
STRDC’35475’ 
REGDS1;暫存單元 
END

5、求累加和 
【例1】將變量 NUMBER 中的 5 個(gè)二進(jìn)制數(shù)累加后放入變量 SUM 中。
START
LEAGR2,NUMBER;地址指針
LEAGR3,5;循環(huán)計(jì)數(shù)器
LEAGR0,0;累加和清 0
L1ADDGR0,0,GR2;累加
LEAGR2,1,GR2;地址指針指向下一個(gè)二進(jìn)制數(shù)
LEAGR3,-1,GR3;計(jì)數(shù)器減 1
JNZL1;未完,繼續(xù)
STGR0,SUM;累加結(jié)束,累加和送入 SUM 單元
RET
NUMBERDS5
SUMDS1
END 轉(zhuǎn)帖于:軟件水平考試_考試吧
文章搜索
Casl匯編語言輔導(dǎo)(二)網(wǎng)友評論網(wǎng)友評論
版權(quán)聲明 --------------------------------------------------------------------------------------
    如果軟件水平考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請與我們聯(lián)系,我們將會(huì)及時(shí)處理。如轉(zhuǎn)載本軟件水平考試網(wǎng)內(nèi)容,請注明出處。