日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊(cè)]

當(dāng)前位置:電子發(fā)燒友網(wǎng) > 圖書頻道 > 電子 > 《計(jì)算機(jī)組成原理與匯編語言》 > 第3章 指令系統(tǒng)與匯編語言設(shè)計(jì)

第12節(jié) 匯編語言舉例

例1 二進(jìn)制加法程序。

   兩個(gè)多字節(jié)的二進(jìn)制數(shù)分別放在以ADD1和ADD2為首地址的存貯單元中,兩個(gè)數(shù)的字長(zhǎng)度放在CONT單元中。最后相加結(jié)果放在以SUM為首地址的單元中。

  所有數(shù)的低字節(jié)在前,高字節(jié)在后。

         程序如下:

   DATA SEGNENT
   ADD1 DBFEH,86H,7CH,44H,56H,1FH
   ADD2 DB56H,49H,4EH,0FH,9CH,22HSUM DB 6DUP(0)
   CONT DB 3
   DATA ENDS
   STACK SEGMENT PARASTACK′STACK′
   DB 100DUP(?)
   STACK ENDS
   CODE SEGMENT
   ASSUME:CS:CODE,DS:DATA,ES:DATA,SS:STACK
   MADDB: MOV AX,DATA
   MOV DS,AX ;初始化數(shù)據(jù)段寄存器
   MOV ES,AX ;初始化輔助段寄存器
   MOV SI,OFFSETADD1;被加數(shù)地址→SI
   MOV DI,OFFSETADD2;加數(shù)地址→DI
   MOV BX,OFFSETSUM;和地址→BX
   MOV CL,BYTEPTRCONT
   MOV CH,0;初始化相加字長(zhǎng)度
   CLCMADDB1:MOV AX,[SI]
   ADC AX,[DI] ;16位相加 
   INC SI
   INC SI
   INC DI
   INC DI
   MOV, [BX]AX ;相加結(jié)果送結(jié)果單元
   INC BX
   INC BX
   LOOP MADDB1 ;執(zhí)行循環(huán)
   HLT
   CODE ENDS
   END MADDB

例2 兩個(gè)未壓縮的BCD數(shù)相加程序。

    在8088中可以對(duì)兩個(gè)用ASCII碼表示的十進(jìn)制數(shù)直接相加,以得到它們的和。設(shè)被加數(shù)放在SBCD1為首地址的單元中,加數(shù)放在SBCD2為首地址的單元中。

   DATA SEGMENT
   SBCD1 DB′5′,′6′,′9′,′2′
   SBCD2 DB′2′,′3′,′7′,′8′
   SSUM DB 4DUP(0)
   CONT DB 4
   DATA ENDS
   STACK SEGMENT PARASTACK′STACK′
   DB 200DUP(?)STACK ENDS
   CODE SEGMENT
   ASSUMECS:CODE,DS:DATA,SS:STACK,ES:DATA
   SBCDAD:MOV AX,DATA
   MOV DS,AX
   MOV ES,AX
   CLC
   CLD
   MOV SI,OFFSETSBCD1
   MOV DI,OFFSETSBCD2
   MOV BX,OFFSETSSUMMOV CL,CONT
   MOV CH,0
   SBCDAD1:LODS SBCD1
   ADC AL[DI], ;加法運(yùn)算
   AAA
   INC DI
   MOV BYTEPTR,AL
   INC BX
   LOOP SBCDAD1
   HLT
   CODE ENDS
   END SBCDAD
例3 二進(jìn)制整數(shù)乘法程序。

    兩個(gè)二進(jìn)制整數(shù)相乘,每個(gè)數(shù)的字長(zhǎng)度放在CONT中,被乘數(shù)放在DATA1為首地址的存貯單元中,乘數(shù)放在DATA2為首地址的存貯單元中,乘積放在DATA3為
          
   首地址的存貯單元中。

      程序如下:

   DATA SEGMENT
   DATA1 DW 403EH,1F51H
   DATA2 DW 10F5H,111EH
   DATA3 DW 4DUP(0)
   CONT DW 2
   DATA ENDS
   STACK SEGMENTPARASTACK′STACK′
   DB 100 DUP(?)
   STACK ENDS
   CODE SEGMENT
   ASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACK
   MUL: MOV AX,DATA
   MOV DS,AX
   MOV ES,AX
   MOV SI,OFFSETDATA1
   MOV DI,OFFSETDATA2
   MOV BX,OFFSETDATA3
   MOV CX,CONT
   CLD
   MUL1:PUSH CX
   MOV DX,[SI]
   INC SIINC SI
   PUSH BX
   PUSH DI
   MOV CX,CONT
   MUL2:PUSH CX
   PUSH DX
   MOV AX,[DI]
   INC DI
   INC DI
   MUL DX
   ADD,AX[DI]
   INC BX
   INC BX
   ADC,DXPOP DX
   POP CX
   LOOP MUL2
   POP DI
   POP BX
   INC BX
   INC BX
   POP CX
   LOOP MUL1
   HLT
   CODE ENDS
   END MUL

例4 二進(jìn)制數(shù)轉(zhuǎn)換成ASCII碼程序。

     編制程序,將一個(gè)字長(zhǎng)的二進(jìn)制數(shù)轉(zhuǎn)換成一個(gè)ASCII碼表示的字符串。二進(jìn)制數(shù)放在BINNUM中,其轉(zhuǎn)換結(jié)果放ASCBCD中。

      程序如下:

   DATA SEGMENT
   BINNUM DW 4FFFH
   ASCBCD DB 5 DUP(0)
   DATA ENDS
   STACKSEGMENTPARASTACK′STACK′
   DB 200DUP(?)
   STACK ENDS
   CODE SEGMENT
   ASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACK
   BINASC:MOV AX,DATA
   MOV DS,AX
   MOV ES,AX
   MOV CX,5
   XOR DX,DX
   MOV AX,BINNUM
   MOV BX,10
   MOV DI,OFFSETASCBCDBINASC1: DIV BX
   ADD DL,30H
   MOV [DI],DL
   INC DI
   AND AX,AX
   JZ STOP
   MOV DL,0
   LOOP BINASC1
   STOP: HLT
   CODE ENDS
   END BINASC
例5 ASCII碼轉(zhuǎn)換成二進(jìn)制數(shù)的程序

    將一個(gè)4位ASCII碼數(shù)字轉(zhuǎn)換成二進(jìn)制數(shù),ASCII碼數(shù)字放在以ASCSTG為首地址的內(nèi)存單元中(共有4位),轉(zhuǎn)換結(jié)果放入以BIN為首地址的內(nèi)存單元中。

          程序如下:

   DATA SEGMENT
   ASCSTG DB′5′,′A′,′6′,′1′
   BIN DB2DUP(0)
   DATA ENDS
   STACK SEGMENTPARASTACK′STACK′
   DB 100 DUP(?)
   STACK ENDS
   CODE SEGMENT
   ASSUMECS:CODE,DS:DATA,SS:STACK
   ASCB: MOV AX,DATA
   MOV DS,AX
   MOV CL,4
   MOV CH,CL
   MOV SI,OFFSETASCSTG
   CLD
   XOR AX,AX
   XOR DX,DX
   ASCB1: LODS ASCSTG
   AND AL,7FH
   CMP AL,′0′
   JL ERROR
   CMP AL,′9′
   JG ASCB2
   SUB AL,30H
   JMP SHORTASCB3ASCB2: CMP AL,′A′
   JL ERROR
   CMP AL,′F′
   JG ERROR
   SUB AL,37H
   ASCB3: OR DL,AL
   ROR DX,CL
   DEC CH
   JNZ ASCB1MOV WORD PTR BIN,DX
   HLT
   CODE ENDS 
   END ASCB
   
例6 輸入一行字符的輸入程序。

     一般從終端可送入80個(gè)字符,再加一個(gè)回車符共81個(gè),程序在回車符后另加1個(gè)換行符,因此放在緩沖區(qū)內(nèi)的字符實(shí)際為82個(gè)?,F(xiàn)假設(shè)接口的接收寄存器地址為52H,
      
    發(fā)送寄存器為53H,狀態(tài)寄存器為54H,并且狀態(tài)寄存器b-0=1時(shí)為發(fā)送就緒,b -1=1時(shí)為接收就緒。在接收數(shù)據(jù)時(shí)要進(jìn)行偶校驗(yàn),如發(fā)現(xiàn)有錯(cuò)則轉(zhuǎn)錯(cuò)誤處理。若輸入
      
    字符超過80個(gè)字符,則輸出緩沖區(qū)溢出信息。

   程序如下:

   DATA SEGSEGMENT
   MESSAGE DB′BUFFEROVERFLOW′,0DH,0AH
   DATAS EGENDS
   COMSEG SEGMENT
   BUFFER DB 82DUP(?)
   COUNT DW?
   COMSEG ENDS
   …CODE SEGMENT
   INREG EQU 52H
   OUTREG EQU 53H
   STATUS EQU 54H
   RRDY EQU 00000010B
   TRDY EQU 00000001B
   … ASSUMEDS:DATASEG,ES:COMSEG
   MOV AX,DATASEG
   MOV DS,AX
   MOV AX,COMSEG
   MOV ES,AX
   …INPUT80 PROC NEAR
   PUSH DI
   PUSH SI
   PUSH AX
   PUSH CX
   MOV DI,OFFSETBUFFER
   MOV COUNT,DI
   MOV CX,81
   CLDNEXTIN:IN AL,STATUS
   TEST AL,RRDY
   JZ NEXTIN
   IN AL,INREG
   OR AL,0
   JPE NOERROR
   JMP NEAR PTR ERROR
   NOERROR:AND AL,7FH
   STOSB
   CMP AL,0DH
   LOOPNE NEXTINJNE OVERFLOW
   MOV AL,0AH
   STOSB
   SUB DI,COUNT
   MOV COUNT,DI
   …POP CX
   POP AX
   POP SI
   POP DIRET
   OVERFLOW:MOV SI,OFFSETMESSAGE
   MOV CX,17
   NEXTOUT: IN ALSTATUS
   TEST AL,TRDY
   JZ NEXTOUT
   LODSB
   OUT OUTREG,AL
   LOOP NEXTOUT
    …POP CX
   POP AX
   POP SI
   POP DI
   RET
   INPUT80 ENDP
    

 

 

 

?
海伦市| 新巴尔虎右旗| 美姑县| 岱山县| 益阳市| 敖汉旗| 登封市| 芷江| 体育| 吴川市| 浮山县| 平乡县| 瑞安市| 万荣县| 宁明县| 普洱| 交城县| 湘阴县| 深泽县| 芜湖县| 桦南县| 武夷山市| 郓城县| 通辽市| 九台市| 常山县| 呈贡县| 波密县| 金平| 青河县| 临江市| 石河子市| 阿巴嘎旗| 唐山市| 久治县| 新平| 浙江省| 比如县| 灌南县| 博野县| 奎屯市|