網(wǎng)站首頁
分類導(dǎo)航
試題中心
下載中心
英語學(xué)習(xí)
繽紛校園
考試論壇
網(wǎng)站留言
客服中心
 計算機(jī)等級考試三級PC上級題精選21-30
【字體:
計算機(jī)等級考試三級PC上級題精選21-30
http://1glr.cn 來源:考試吧(Exam8.com)整理 點擊: 更新:2005-7-10

上機(jī)題之21
以下內(nèi)容為程序代碼:

;*      請編制程序PROG1.ASM,其功能是:內(nèi)存中連續(xù)存放著十個無符
;*  號8位二進(jìn)制數(shù),現(xiàn)將此十個數(shù)轉(zhuǎn)換成十個8位格雷碼表示的數(shù),結(jié)果
;*  存入內(nèi)存。其轉(zhuǎn)換方法為格雷碼的最高位g[7]與二進(jìn)制數(shù)的最高位d[7]
;*  相同, 格雷碼的其余七位g[k] (k=6,…,0) 分別為二進(jìn)制數(shù)的位d[k+1]
;*  (k=6,…,0)與位d[k] (k=6,…,0) 異或的結(jié)果。
;*      例如:
;*      內(nèi)存中有  00H,02H,32H,45H,08H,19H,67H,03H,90H,85H
;*      結(jié)果為    00H,03H,2BH,67H,0CH,15H,54H,02H,D8H,C7H
;*      部分程序已給出, 其中原始數(shù)據(jù)由過程LOAD從文件INPUT1.DAT
;*  中讀入SOURCE開始的內(nèi)存單元中。運算結(jié)果要求從RESULT開始存放,
;*  由過程SAVE保存到文件OUTPUT1.DAT中。
;*      填空BEGIN和END之間已給出的源程序使其完整(空白已用橫線標(biāo)
;*  出,每行空白一般只需一條指令, 但采用功能相當(dāng)?shù)亩鄺l指令亦可),
;*  或刪除BEGIN和END之間原有的代碼并自行編程來完成要求的功能。
;*      對程序必須進(jìn)行匯編,并與IO.OBJ鏈接產(chǎn)生PROG1.EXE執(zhí)行文件,
;*  最終運行程序產(chǎn)生結(jié)果(無結(jié)果或結(jié)果不正確者均不得分)。調(diào)試中
;*  若發(fā)現(xiàn)整個程序中存在錯誤之處, 請加以修改。

               EXTRN      LOAD:FAR,SAVE:FAR
N         EQU         10
STAC      SEGMENT   STACK
           DB          128 DUP (?)
STAC      ENDS
DATA     SEGMENT
SOURCE   DB          N DUP(?)           ; 順序存放十個字節(jié)數(shù)
RESULT   DB          N DUP(0)           ; 存放結(jié)果
NAME0    DB          ''INPUT1.DAT'',0
NAME1    DB          ''OUTPUT1.DAT'',0
DATA     ENDS
CODE     SEGMENT
           ASSUME     CS:CODE, DS:DATA, SS:STAC
START    PROC         FAR
           PUSH       DS
           XOR        AX,AX
           PUSH       AX
           MOV        AX,DATA
           MOV        DS,AX
           LEA        DX,SOURCE        ; 數(shù)據(jù)區(qū)起始地址
           LEA        SI,NAME0         ; 原始數(shù)據(jù)文件名
           MOV        CX,N             ; 字節(jié)數(shù)
           CALL       LOAD             ; 從 ''INPUT1.DAT''中讀取數(shù)據(jù)
;  **** BEGIN ****
           LEA        DI,RESULT
           LEA        SI,SOURCE
           MOV        CX,10
AGN0:      MOV        AL,[SI]
           push       cx
           ;_______________
           MOV        CX,8
           MOV        BX,0
AGN1:      MOV        AH,0
           shl        bl,1
           ;___        BL,1
           ROL        AL,1  ; 老王注: 此處其實用 rcl 較好, 用 rol 有迷惑考生之意
           rcl        ah,1  ; 老王注: 此處不可用 rol
           ;_______________
           CMP        AH,BH
           jne        set_one
           ;___        SET_ONE
           JMP        NEXT
SET_ONE:   OR         BL,01H
NEXT:      mov        bh,ah
           ;MOV        __,AH
           LOOP       AGN1
           pop        cx
           ;_______________
           MOV        [DI],BL
           INC        SI
           INC        DI
           LOOP       AGN0
;  ****  END  ****
           LEA         DX,RESULT         ; 結(jié)果數(shù)據(jù)區(qū)首址
           LEA         SI,NAME1          ; 結(jié)果文件名
           MOV         CX,N              ; 結(jié)果字節(jié)數(shù)
           CALL        SAVE              ; 保存結(jié)果到文件
           RET
START      ENDP
CODE       ENDS
END        START

 


input1.dat 內(nèi)容如下:
A0 88 56 3D 02 D3 90 78 23 E8
output1.dat 內(nèi)容應(yīng)當(dāng)如下:
F0 CC 7D 23 03 BA D8 44 32 9C


上機(jī)題之22
以下內(nèi)容為程序代碼:

;*      請編制程序PROG1.ASM, 其功能是: 內(nèi)存中從SOURCE開始連續(xù)
;*  存放著二十一個八位有符號數(shù)(補(bǔ)碼),其相鄰兩數(shù)之間差值不超過
;*  -8至7。對這種變化緩慢的數(shù)據(jù)可采用差分方法進(jìn)行壓縮。即第一
;*  個數(shù)據(jù)不變,其后的數(shù)據(jù)取與前一數(shù)據(jù)的差值并用四位二進(jìn)制補(bǔ)碼
;*  表示, 兩個差值拼成一個字節(jié), 前一個差值放在高四位,后一個差
;*  值放在低四位。
;*      例如:
;*           原數(shù)據(jù)(X[n]): 23H,27H,2AH,29H,22H,...
;*           壓縮后(Y[n]): 23H,    43H,    F9H,...
;*      編程按上述方法進(jìn)行壓縮, 結(jié)果保存在RESULT開始的內(nèi)存單
;*  元中。
;*      部分程序已在PROG1.ASM中給出, 請?zhí)羁誃EGIN和END之間已給
;*  出的源程序使其完整(空白已用橫線標(biāo)出, 每行空白一般只需一條
;*  指令, 但功能相當(dāng)?shù)亩鄺l指令亦可)或刪除BEGIN和END之間原有的
;*  代碼并自行編寫程序片段來完成要求的功能。
;*      原始數(shù)據(jù)由過程LOAD從文件INPUT1.DAT中讀入SOURCE開始的內(nèi)
;*  存單元中, 結(jié)果要求從RESULT開始存放, 由過程SAVE保存到文件
;*  OUTPUT1.DAT中。
;*      對程序必須進(jìn)行匯編, 并與IO.OBJ鏈接產(chǎn)生PROG1.EXE 執(zhí)行文
;*  件, 最終運行程序產(chǎn)生結(jié)果(無結(jié)果或結(jié)果不正確者均不得分)。

           EXTRN      LOAD:FAR,SAVE:FAR

N          EQU        10

STAC       SEGMENT    STACK
           DB         128 DUP (?)
STAC       ENDS

DATA       SEGMENT
SOURCE     DB         2*N+1   DUP(?)
RESULT     DB         N+1     DUP(0)
NAME0      DB         'INPUT1.DAT',0
NAME1      DB         'OUTPUT1.DAT',0
DATA       ENDS

CODE       SEGMENT
           ASSUME     CS:CODE, DS:DATA, SS:STAC
START      PROC       FAR
           PUSH       DS
           XOR        AX,AX
           PUSH       AX
           MOV        AX,DATA
           MOV        DS,AX
           MOV        ES,AX       ; 置附加段寄存器

           LEA        DX,SOURCE   ; 數(shù)據(jù)區(qū)起始地址
           LEA        SI,NAME0    ; 原始數(shù)據(jù)文件名起始地址
           MOV        CX,2*N+1    ; 字節(jié)數(shù)
           CALL       LOAD        ; 從"input1.dat"中讀取數(shù)據(jù)
;  **** BEGIN ****

           LEA        SI,SOURCE
           LEA        DI,RESULT
           CLD
           MOVSB                                ; Y[0]=X[0]
           XOR        BX,BX                     ; FLAG=0
           MOV        DX,N*2                    ; COUNTER
COMPRESS:
           LODSB
           sub        al,[si-2]
           xor        bx,1
           jz         low_hex
           ;SUB        _________                 ; X[n]-X[n-1]
           ;____________________                 ; FLAG=NOT FLAG
           ;J__        LOW_HEX
           MOV        CL,4
           shl        al,cl
           ;___        AL,CL
           MOV        AH,AL
           JMP        NEXT
LOW_HEX:   and        al,0fh
           ;__________________
           OR         AL,AH
           STOSB
NEXT:      dec        dx
           ;___________________
           JNE        COMPRESS

;  ****  END  ****
           LEA        DX,RESULT    ; 結(jié)果數(shù)據(jù)區(qū)首址
           LEA        SI,NAME1     ; 結(jié)果文件名起始地址
           MOV        CX,N+1       ; 字節(jié)數(shù)
           CALL       SAVE         ; 保存結(jié)果到"output1.dat"文件中
           RET
START      ENDP
CODE       ENDS
           END        START

 


input1.dat 內(nèi)容如下:[b]
17 1B 1E 24 29 2D 2A 25 20 27 2C 2F 34 37 33 31 36 3C 3F 39 33
[b]output1.dat 內(nèi)容應(yīng)當(dāng)如下:
17 43 65 4D BB 75 35 3C E5 63 AA

上機(jī)題之23
以下內(nèi)容為程序代碼:

;*      請編制程序PROG1.ASM, 其功能是: 內(nèi)存中連續(xù)存放著十六個
;*  10位二進(jìn)制數(shù)DB9 DB8 … DB0,每個二進(jìn)制數(shù)均用兩個字節(jié)表示,其
;*  存放格式均為
;*  DB9 DB8 DB7 DB6 DB5 DB4 DB3 DB2    DB1 DB0 0  0  0  0  0  0
;*  │←─── 低地址字節(jié) ───→│  │←──高地址字節(jié)──→│
;*      請按序?qū)⒚總10位無符號二進(jìn)制數(shù)轉(zhuǎn)換成以下格式
;*  DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0   0  0  0  0  0  0  DB9 DB8
;*  │←─── 低地址字節(jié)───→│   │←──高地址字節(jié)──→│
;*  轉(zhuǎn)換結(jié)果按原序存放在內(nèi)存中。
;*      例如:
;*      內(nèi)存中有 C048H,4091H,0080H,……
;*      結(jié)果為 23H,01H,45H,02H,00H,02H,……
;*      部分程序已給出,其中原始數(shù)據(jù)由過程LOAD從文件INPUT1.DAT
;*  中讀入SOURCE開始的內(nèi)存單元中。運算結(jié)果要求從RESULT開始存放,
;*  由過程SAVE保存到OUTPUT1.DAT文件中。
;*      填空BEGIN和END之間已給出的源程序使其完整 (空白已用橫線
;*  標(biāo)出,每行空白一般只需一條指令,但采用功能相當(dāng)?shù)亩鄺l指令亦
;*  可), 或刪除BEGIN和END之間原有的代碼并自行編程來完成要求的
;*  功能。
;*      對程序必須進(jìn)行匯編, 并與IO.OBJ鏈接產(chǎn)生PROG1.EXE執(zhí)行文
;*  件,最終運行程序產(chǎn)生結(jié)果(無結(jié)果或結(jié)果不正確者均不得分)。調(diào)
;*  試中若發(fā)現(xiàn)整個程序中存在錯誤之處,請加以修改。

          EXTRN      LOAD:FAR,SAVE:FAR
N         EQU         16
STAC      SEGMENT   STACK
           DB          128 DUP (?)
STAC      ENDS
DATA     SEGMENT
SOURCE   DW          N DUP(?)
RESULT   DB          N*2 DUP(0)
NAME0    DB          'INPUT1.DAT',0
NAME1    DB          'OUTPUT1.DAT',0
DATA     ENDS
CODE      SEGMENT
           ASSUME    CS:CODE,DS:DATA,SS:STAC
START     PROC       FAR
            PUSH      DS
            XOR       AX,AX
            PUSH      AX
            MOV       AX,DATA
            MOV       DS,AX
            LEA       DX,SOURCE        ; 數(shù)據(jù)區(qū)起始地址
            LEA       SI,NAME0         ; 原始數(shù)據(jù)文件名
            MOV       CX,N*2           ; 字節(jié)數(shù)
            CALL      LOAD             ; 從 'INPUT1.DAT'中讀取數(shù)據(jù)
;  **** BEGIN ****
            MOV       DI,OFFSET RESULT
            MOV       BX,0
            MOV       CH,N
PRO:        MOV       AH,BYTE PTR SOURCE[BX]
            mov       al,byte ptr source[bx+1]
            ;MOV       AL,________________
            MOV       DL,AH             ; 10位無符號二進(jìn)制數(shù)高八位
            MOV       DH,AL             ; 10位無符號二進(jìn)制數(shù)低二位
            MOV       CL,2
            shl       ax,cl
            ;SHL       AX,__
            shl       dx,cl
            ;SHL       DX,__
            MOV       AL,DH
            mov       [di],ah
            mov       [di+1],al
            ;MOV       [DI],__
            ;MOV       [DI+1],__
            ADD       DI,2
            ADD       BX,2
            DEC       CH
            JNZ       PRO
;  ****  END  ****
            LEA       DX,RESULT   ; 結(jié)果數(shù)據(jù)區(qū)首址
            LEA       SI,NAME1    ; 結(jié)果文件名
            MOV       CX,N*2      ; 結(jié)果字節(jié)數(shù)
            CALL      SAVE        ; 保存結(jié)果到文件
          RET
START     ENDP
CODE      ENDS
END       START

 


input1.dat 內(nèi)容如下:
FF C0 F0 C0 FF 80 FF 40 FF 00 FA 40 FA 80 AA 40 CD 40 11 C0 00 00 31 80 31 40 66 40 66 C0 33 40
output1.dat 內(nèi)容應(yīng)當(dāng)如下:
FF 03 C3 03 FE 03 FD 03 FC 03 E9 03 EA 03 A9 02
35 03 47 00 00 00 C6 00 C5 00 99 01 9B 01 CD 00

上機(jī)題之24
以下內(nèi)容為程序代碼:

;*      請編制程序PROG1.ASM, 其功能是: 內(nèi)存中連續(xù)存放著五個用
;*  壓縮型(組合型)BCD碼表示的十進(jìn)制數(shù),請將它們分別轉(zhuǎn)換成ASCII
;*  字符,高位的BCD碼轉(zhuǎn)換后放在較高的地址單元。
;*      例如:
;*      內(nèi)存中有
;*        21H,43H,... (共五個字節(jié))
;*      結(jié)果為
;*        31H('1'),32H('2'),33H('3'),34H('4'),...(共十個字節(jié))
;*     部分程序已給出,其中原始數(shù)據(jù)由過程LOAD從文件INPUT1.DAT
;*  中讀入SOURCE開始的內(nèi)存單元中。 運算結(jié)果要求從RESULT開始存
;*  放, 由過程SAVE保存到文件OUTPUT1.DAT中。填空BEGIN和END之間
;*  已給出的源程序使其完整(空白已用橫線標(biāo)出,每行空白一般只需
;*  一條指令,但采用功能相當(dāng)?shù)亩鄺l指令亦可),或刪除BEGIN和END
;*  之間原有的代碼并自行編程來完成要求的功能。
;*      對程序必須進(jìn)行匯編, 并與IO.OBJ鏈接產(chǎn)生PROG1.EXE執(zhí)行文
;*  件,最終運行程序產(chǎn)生結(jié)果 (無結(jié)果或結(jié)果不正確者均不得分)。
;*  調(diào)試中若發(fā)現(xiàn)整個程序中存在錯誤之處,請加以修改。

          EXTRN      LOAD:FAR,SAVE:FAR
N         EQU         5
STAC      SEGMENT   STACK
           DB          128 DUP (?)
STAC      ENDS
DATA     SEGMENT
SOURCE   DB          N DUP(?)
RESULT   DB          N*2 DUP(0)
NAME0    DB          'INPUT1.DAT',0
NAME1    DB          'OUTPUT1.DAT',0
DATA     ENDS
CODE     SEGMENT
           ASSUME    CS:CODE,DS:DATA,SS:STAC
START    PROC        FAR
           PUSH      DS
           XOR       AX,AX
           PUSH      AX
           MOV       AX,DATA
           MOV       DS,AX
           MOV       ES,AX
           LEA       DX,SOURCE        ; 數(shù)據(jù)區(qū)起始地址
           LEA       SI,NAME0         ; 原始數(shù)據(jù)文件名
           MOV       CX,N             ; 字節(jié)數(shù)
           CALL      LOAD             ; 從'INPUT.DAT'中讀取數(shù)據(jù)
;  **** BEGIN ****
           LEA        SI,SOURCE
           LEA        DI,RESULT
           MOV        CX,N
           CLD
NEXT:      lodsb
          ;LODS__
           MOV       BL,AL
           and       al,0fh
          ;AND        AL, ____
           OR         AL,30H
           stosb
          ;STOS__
           mov       al,bl
          ;MOV       AL, ____
           push      cx
          ;PUSH      ____
           mov       cl,4
          ;MOV       CL, ____
           SAR       AL,CL
           pop       cx
          ;POP       ____
           OR        AL,30H
           stosb
          ;STOS__
           LOOP       NEXT
           ;  ****  END  ****
           LEA        DX,RESULT         ; 結(jié)果數(shù)據(jù)區(qū)首址
           LEA        SI,NAME1          ; 結(jié)果文件名
           MOV        CX,N*2            ; 結(jié)果字節(jié)數(shù)
           CALL       SAVE              ; 保存結(jié)果到文件
           RET
START    ENDP
CODE     ENDS
         END        START

 


input1.dat 內(nèi)容如下:
78 25 32 49 71
output1.dat 內(nèi)容應(yīng)當(dāng)如下:
38 37 35 32 32 33 39 34 31 37

上機(jī)題之25
以下內(nèi)容為程序代碼:

;*      請編制程序PROG1.ASM, 其功能是: 內(nèi)存中連續(xù)存放著兩個無
;*  符號字節(jié)數(shù)序列Ak和Bk(k=0,…,9),求序列Ck,Ck=Ak÷Bk(運算
;*  結(jié)果按序以字的形式連續(xù)存放,其中低字節(jié)為商,高字節(jié)為余數(shù))。
;*    例如:
;*    序列Ak為01H,7FH,80H,FFH,…;
;*    序列Bk為FFH,80H,7FH,01H,…。
;*    結(jié)果Ck為0100H(00H為商、01H為余數(shù)),7F00H,0101H,00FFH,…。
;*      部分程序已給出,其中原始數(shù)據(jù)由過程LOAD從文件INPUT1.DAT
;*  中讀入SOURCE開始的內(nèi)存單元中,運算結(jié)果要求從RESULT開始存放,
;*  由過程SAVE保存到文件OUTPUT1.DAT中。
;*      填空BEGIN和END之間已給出的源程序使其完整 (空白已用橫線
;*  標(biāo)出, 每行空白一般只需一條指令,但采用功能相當(dāng)?shù)亩鄺l指令亦
;*  可), 或刪除BEGIN和END之間原有的代碼并自行編程來完成要求的
;*  功能。
;*      對程序必須進(jìn)行匯編, 并與IO.OBJ鏈接產(chǎn)生PROG1.EXE執(zhí)行文
;*  件,最終運行程序產(chǎn)生結(jié)果(無結(jié)果或結(jié)果不正確者均不得分)。調(diào)
;*  試中若發(fā)現(xiàn)整個程序中存在錯誤之處,請加以修改。

          EXTRN      LOAD:FAR,SAVE:FAR
N         EQU         10
STAC      SEGMENT   STACK
           DB          128 DUP (?)
STAC      ENDS
DATA     SEGMENT
SOURCE   DB          N*2 DUP(?)
RESULT   DW          N DUP(0)
NAME0    DB          'INPUT1.DAT',0
NAME1    DB          'OUTPUT1.DAT',0
DATA     ENDS       
CODE     SEGMENT   
           ASSUME    CS:CODE,DS:DATA,SS:STAC
START     PROC       FAR
           PUSH       DS
           XOR        AX,AX
           PUSH       AX
           MOV        AX,DATA
           MOV        DS,AX
           LEA        DX,SOURCE        ; 數(shù)據(jù)區(qū)起始地址
           LEA        SI,NAME0         ; 原始數(shù)據(jù)文件名
           MOV        CX,N*2           ; 字節(jié)數(shù)
           CALL       LOAD             ; 從'INPUT1.DAT'中讀取數(shù)據(jù)
;  **** BEGIN ****                               
           MOV        DI,OFFSET RESULT
           MOV        BX,0
           mov        cx,N
          ;______________________
PRO:       mov        ah,0
           mov        al,source[bx]
           div        source[bx+N]
          ;MOV        _________
          ;_____________,SOURCE[BX]
          ;DIV         ___________
           mov        [di],ax
          ;MOV        [DI],___
           ADD         DI,2
           inc         bx
          ;_______________________
           DEC         CX
           jnz         pro
          ;___         PRO
;  ****  END  ****           
           LEA         DX,RESULT         ; 結(jié)果數(shù)據(jù)區(qū)首址
           LEA         SI,NAME1          ; 結(jié)果文件名
           MOV         CX,2*N            ; 結(jié)果字節(jié)數(shù)
           CALL        SAVE              ; 保存結(jié)果到文件
         RET
START    ENDP
CODE     ENDS
END      START

 


input1.dat 內(nèi)容如下:
01 7F 80 FF 00 FF 80 7F 01 80 FF 80 7F 01 FF 80 40 01 01 7F
output1.dat 內(nèi)容應(yīng)當(dāng)如下:
00 01 00 7F 01 01 FF 00 00 00 01 7F 02 00 7F 00
01 00 01 01

上機(jī)題之26
以下內(nèi)容為程序代碼:

;*      請編制程序PROG1.ASM, 其功能是: 內(nèi)存中連續(xù)存放的二十
;*  個八位有符號數(shù)(補(bǔ)碼)是由一個八位A/D轉(zhuǎn)換器采集的雙極性信
;*  號(Xn), 現(xiàn)要求對該信號作如下處理(處理后的信號記為Yn):
;*        a).    Yn= Xn+5           Xn<-5
;*        b).    Yn=   0           │Xn│<=5
;*        c).    Yn= Xn-5           Xn>5
;*      例如:
;*        Xn:  03H,FEH(-2),4EH,A2H(-94), ...
;*        Yn:  00H,00H,    49H,A7H(-89), ...
;*      部分程序已在PROG1.ASM中給出, 請?zhí)羁誃EGIN和END之間已給
;*  出的源程序使其完整(空白已用橫線標(biāo)出, 每行空白一般只需一條
;*  指令, 但功能相當(dāng)?shù)亩鄺l指令亦可)或刪除BEGIN和END之間原有的
;*  代碼并自行編寫程序片段來完成要求的功能。
;*      原始數(shù)據(jù)由過程LOAD從文件INPUT1.DAT中讀入SOURCE開始的內(nèi)
;*  存單元中, 結(jié)果要求從RESULT開始存放, 由過程SAVE保存到文件
;*  OUTPUT1.DAT中。
;*      對程序必須進(jìn)行匯編, 并與IO.OBJ鏈接產(chǎn)生PROG1.EXE 執(zhí)行文
;*  件, 最終運行程序產(chǎn)生結(jié)果(無結(jié)果或結(jié)果不正確者均不得分)。

           EXTRN      LOAD:FAR,SAVE:FAR

N          EQU        20
DELTA      EQU        5

STAC       SEGMENT    STACK
           DB         128 DUP (?)
STAC       ENDS

DATA       SEGMENT
SOURCE     DB         N   DUP(?)
RESULT     DB         N   DUP(0)
NAME0      DB         'INPUT1.DAT',0
NAME1      DB         'OUTPUT1.DAT',0
DATA       ENDS

CODE       SEGMENT
           ASSUME     CS:CODE, DS:DATA, SS:STAC
START      PROC       FAR
           PUSH       DS
           XOR        AX,AX
           PUSH       AX
           MOV        AX,DATA
           MOV        DS,AX

           LEA        DX,SOURCE   ; 數(shù)據(jù)區(qū)起始地址
           LEA        SI,NAME0    ; 原始數(shù)據(jù)文件名起始地址
           MOV        CX,N        ; 字節(jié)數(shù)
           CALL       LOAD        ; 從"input1.dat"中讀取數(shù)據(jù)
;  **** BEGIN ****
           LEA        SI,SOURCE
           LEA        DI,RESULT
           mov        cx,N
           ;____________________
NEXT:      MOV        AL,[SI]
           CMP        AL,-DELTA
           jl         less
          ;J__        LESS
           CMP        AL,DELTA
           jg         great
          ;J__        GREAT
           MOV        AL,0
           JMP        STORE
GREAT:     SUB        AL,DELTA
           JMP        STORE
LESS:      ADD        AL,DELTA
STORE:     MOV        [DI],AL
           inc        di
           inc        si
           loop       next
          ;____________________
          ;____________________
          ;____________________
;  ****  END  ****
           LEA        DX,RESULT    ; 結(jié)果數(shù)據(jù)區(qū)首址
           LEA        SI,NAME1     ; 結(jié)果文件名起始地址
           MOV        CX,N         ; 字節(jié)數(shù)
           CALL       SAVE         ; 保存結(jié)果到"output1.dat"文件中
           RET
START      ENDP
CODE       ENDS
           END        START

 


input1.dat 內(nèi)容如下:
01 03 FE 06 13 44 78 30 FC C5 92 C5 FE 04 57 61 79 4A 05 FC
output1.dat 內(nèi)容應(yīng)當(dāng)如下:
00 00 00 01 0E 3F 73 2B 00 CA 97 CA 00 00 52 5C
74 45 00 00


上機(jī)題之27
以下內(nèi)容為程序代碼:

;*      請編制程序PROG1.ASM, 其功能是: 內(nèi)存中連續(xù)存放著兩個無
;*  符號字節(jié)數(shù)序列Ak和Bk (k=0,…,9),求序列Ck,Ck=Ak-Bk(Ck以
;*  有符號字的形式按C0,…,C9的順序連續(xù)存放)。
;*      例如:
;*      序列Ak為30H,FFH,80H,FFH,…;
;*      序列Bk為00H,FFH,FFH,0AH,…。
;*      結(jié)果Ck為0030H,0000H,FF81H,FFF5H, …。
;*      部分程序已給出, 其中原始數(shù)據(jù)由過程LOAD從文件INPUT1.DAT
;*  中讀入SOURCE開始的內(nèi)存單元中,運算結(jié)果要求從RESULT開始存放,
;*  由過程SAVE保存到文件OUTPUT1.DAT中。
;*      填空BEGIN和END之間已給出的源程序使其完整 (空白已用橫線
;*  標(biāo)出,每行空白一般只需一條指令,但采用功能相當(dāng)?shù)亩鄺l指令亦
;*  可), 或刪除BEGIN和END之間原有的代碼并自行編程來完成要求的
;*  功能。
;*      對程序必須進(jìn)行匯編, 并與IO.OBJ鏈接產(chǎn)生PROG1.EXE執(zhí)行文
;*  件, 最終運行程序產(chǎn)生結(jié)果(無結(jié)果或結(jié)果不正確者均不得分)。調(diào)
;*  試中若發(fā)現(xiàn)整個程序中存在錯誤之處,請加以修改。

          EXTRN      LOAD:FAR,SAVE:FAR
N         EQU         10
STAC      SEGMENT   STACK
           DB          128 DUP (?)
STAC        ENDS
DATA       SEGMENT
SOURCE     DB         N*2 DUP(?)
RESULT     DW         N DUP(0)
NAME0      DB         'INPUT1.DAT',0
NAME1      DB         'OUTPUT1.DAT',0
DATA       ENDS
CODE       SEGMENT
            ASSUME    CS:CODE, DS:DATA, SS:STAC
START     PROC       FAR
            PUSH      DS
            XOR       AX,AX
            PUSH      AX
            MOV       AX,DATA
            MOV       DS,AX
            LEA       DX,SOURCE         ; 數(shù)據(jù)區(qū)起始地址
            LEA       SI,NAME0          ; 原始數(shù)據(jù)文件名
            MOV       CX,N*2            ; 字節(jié)數(shù)
            CALL      LOAD              ; 從'INPUT1.DAT'中讀取數(shù)據(jù)
;  **** BEGIN ****
            MOV       DI,OFFSET RESULT ; 結(jié)果從RESULT開始存放
            MOV       BX,0
            mov       cx,N
           ;________________
PRO:        MOV       AH,0
            MOV       AL,SOURCE[BX]     ; 序列Ak中的一個字節(jié)
            sub       al,source[bx+N]
           ;SUB       AL,_______________ ; Ck=Ak-Bk
            jnc       jump
           ;____      JUMP               ; 無借位轉(zhuǎn)JUMP
            mov       ah,0ffh
           ;MOV       AH,_____           ; 有借位轉(zhuǎn)換成有符號字(為負(fù))
JUMP:       mov       [di],ax
           ;MOV       ____,AX
            ADD       DI,2
            INC       BX
            DEC       CX
            JNZ       PRO
;  ****  END  ****
            LEA       DX,RESULT         ; 結(jié)果數(shù)據(jù)區(qū)首址
            LEA       SI,NAME1          ; 結(jié)果文件名
            MOV       CX,N*2            ; 結(jié)果字節(jié)數(shù)
            CALL      SAVE              ; 保存結(jié)果到文件
          RET
START     ENDP
CODE      ENDS
END       START

 


input1.dat 內(nèi)容如下:
FF 80 7F 00 7F 80 FF 80 81 00 FF FF 80 00 7F 00 00 81 FE FF
output1.dat 內(nèi)容應(yīng)當(dāng)如下:
00 00 81 FF FF FF 00 00 00 00 80 00 FF 00 FF FF
83 FF 01 FF

上機(jī)題之28
以下內(nèi)容為程序代碼:

;*      請編制程序PROG1.ASM,其功能是:
;*      內(nèi)存中共有30個字節(jié)型數(shù)據(jù),找出其中的兩個ASCII字符串并進(jìn)
;*  行校驗。欲尋找的ASCII字符串由13個字符組成: #(23H),7個ASCII
;*  字符,*(2AH),2個ASCII字符,回車符(0DH),換行符(0AH)。
;*      校驗方法為: 對字符#及字符*之間的7個ASCII字符進(jìn)行異或操
;*  作, 若異或操作結(jié)果的ASCII字符表示(異或操作結(jié)果高4位的ASCII
;*  字符表示在前, 低4位的ASCII字符表示在后)與原字符串中字符*之
;*  后的兩個ASCII字符相同, 則將原字符串原樣保存; 反之,則將原字
;*  符串中的所有字符(共13個)均用字符!(21H)代替。
;*      例如:
;*      內(nèi)存中有 33H,35H,23H('#',第一個字符串開始),46H,41H,30H,
;*  2EH,34H,3DH,31H,2AH('*'),32H,31H,0DH,0AH,46H,23H('#',第二個
;*  字符串開始), 46H,41H,30H,2EH,34H,3DH,30H,2AH('*'),32H,31H,
;*  0DH,0AH,55H
;*      結(jié)果為   23H,46H,41H,30H,2EH,34H,3DH,31H,2AH('*'),32H,
;*  31H(校驗正確,該字符串原樣保持),0DH,0AH,21H,21H,21H,21H,21H,
;*  21H,21H,21H,21H,21H,21H,21H,21H(校驗錯, 整個字符串用字符'!'
;*  代替)
;*      部分程序已給出, 其中原始數(shù)據(jù)由過程LOAD從文件INPUT1.DAT
;*  中讀入SOURCE開始的內(nèi)存單元中。運算結(jié)果要求從RESULT開始存放,
;*  由過程SAVE保存到文件OUTPUT1.DAT中。
;*      填空BEGIN和END之間已給出的源程序使其完整(空白已用橫線標(biāo)
;*  出,每行空白一般只需一條指令, 但采用功能相當(dāng)?shù)亩鄺l指令亦可),
;*  或刪除BEGIN和END之間原有的代碼并自行編程來完成要求的功能。
;*      對程序必須進(jìn)行匯編,并與IO.OBJ鏈接產(chǎn)生PROG1.EXE執(zhí)行文件,
;*  最終運行程序產(chǎn)生結(jié)果(無結(jié)果或結(jié)果不正確者均不得分)。調(diào)試中
;*  若發(fā)現(xiàn)整個程序中存在錯誤之處, 請加以修改。

           EXTRN      LOAD:FAR,SAVE:FAR
N          EQU        26
STAC       SEGMENT    STACK
           DB         128 DUP (?)
STAC       ENDS
DATA       SEGMENT
SOURCE     DB         N+4 DUP(?)
RESULT     DB         N DUP(0)
HH         DB         2 DUP(0)
NAME0      DB         'INPUT1.DAT',0
NAME1      DB         'OUTPUT1.DAT',0
DATA       ENDS
CODE       SEGMENT
           ASSUME     CS:CODE, DS:DATA, SS:STAC
START      PROC       FAR
           PUSH       DS
           XOR        AX,AX
           PUSH       AX
           MOV        AX,DATA
           MOV        DS,AX
           LEA        DX,SOURCE          ; 數(shù)據(jù)區(qū)起始地址
           LEA        SI,NAME0           ; 原始數(shù)據(jù)文件名
           MOV        CX,N+4             ; 字節(jié)數(shù)
           CALL       LOAD               ; 從 'INPUT1.DAT'中讀取數(shù)據(jù)
;  **** BEGIN ****
           MOV        SI,0
           MOV        DI,0
           MOV        BX,2               ; 兩個ASCII字符串
REPEAT:    MOV        AH,0
SEARCH:    MOV        AL,SOURCE[SI]
           INC        SI
           CMP        AL,'#'
           jne        search
          ;___        SEARCH
           MOV        RESULT[DI],AL
           INC        DI
SEARCH1:   MOV        AL,SOURCE[SI]
           INC        SI
           cmp        al,'*'
          ;CMP        AL,___
           JE         ASCII
           MOV        RESULT[DI],AL
           INC        DI
           XOR        AH,AL
           jmp        search1
          ;JMP        _______
ASCII:     MOV        RESULT[DI],AL
           INC        DI
           PUSH       DI
           MOV        DI,0
           MOV        DH,2
           MOV        DL,AH                ; 異或結(jié)果暫存在DL中
           MOV        CL,4                 ; 先將異或結(jié)果高4位轉(zhuǎn)換成ASDCII字
                                           ; 符
           SHR        AH,CL                ; 本行開始的4行語句將一個十六進(jìn)制數(shù)
                                           ; 轉(zhuǎn)換為ASCII碼
CHANGE:   CMP        AH,10
           JL         ADD_0
           ADD        AH,'A'-'0'-10
ADD_0:     ADD        AH,'0'
           MOV        HH[DI],AH
           INC        DI
           DEC        DH
           JZ         EXT
           MOV        AH,DL                ; 再將異或結(jié)果低4位轉(zhuǎn)換成ASDCII字符
           AND        AH,0FH
           JMP        CHANGE
EXT:       POP        DI
           MOV        AL,SOURCE[SI]
           MOV        RESULT[DI],AL
           INC        SI
           INC        DI
           MOV        AH,SOURCE[SI]
           MOV        RESULT[DI],AH
           INC        SI
           INC        DI
           MOV        DL,HH
           MOV        DH,HH+1
           CMP        AX,DX
           jne        err
          ;___        ERR
           MOV        AL,0DH              ; 校驗正確
           MOV        RESULT[DI],AL
           INC        DI
           MOV        AL,0AH
           MOV        RESULT[DI],AL
           INC        DI
           JMP        LP
ERR:       SUB        DI,11               ; 校驗錯誤
           MOV        AL,'!'
           mov        cx,13
          ;MOV        CX,___
COVER:     MOV        RESULT[DI],AL
           INC        DI
           LOOP       COVER
LP:        dec        bx
          ;________________
           JZ         EXIT
           JMP        REPEAT
EXIT:      NOP
;  ****    END  ****
           LEA        DX,RESULT          ; 結(jié)果數(shù)據(jù)區(qū)首址
           LEA        SI,NAME1           ; 結(jié)果文件名
           MOV        CX,N               ; 結(jié)果字節(jié)數(shù)
           CALL       SAVE               ; 保存結(jié)果到文件
           RET
START      ENDP
CODE       ENDS
           END        START

 


input1.dat 內(nèi)容如下:
55 23 0A 40 0A 40 0A 40 00 2A 34 42 0D 0A 55 55 55 23 46 41 30 2E 33 3D 31 2A 32 36 0D 0A
output1.dat 內(nèi)容應(yīng)當(dāng)如下:
21 21 21 21 21 21 21 21 21 21 21 21 21 23 46 41
30 2E 33 3D 31 2A 32 36 0D 0A
output1.hex 內(nèi)容應(yīng)當(dāng)如下:
DEDEDEDEDEDEDEDEDEDEDEDEDEDCB9BECFD1CCC2CED5CDC9F2F5FF

上機(jī)題之29
以下內(nèi)容為程序代碼:

;*      請編制程序PROG1.ASM,其功能是:
;*      對內(nèi)存中兩個由7個ASCII字符組成的字符串進(jìn)行如下操作:
;*      在原字符串之前加上字符#(23H); 在原字符串之后加上字符*
;*  (2AH)及另外兩個ASCII字符, 這兩個ASCII字符為原字符串中各字
;*  符(但不包括字符#和*)異或操作后的ASCII碼(異或操作結(jié)果的高4
;*  位的ASCII碼在前, 低4位的ASCII碼在后); 最后加上回車符(0DH)
;*  及換行符(0AH)。
;*     例如:
;*     內(nèi)存中有 46H,41H,30H,2EH,34H,3DH,31H(第一個ASCII字符串),
;*              46H,41H,30H,2EH,34H,3DH,30H(第二個ASCII字符串)
;*     結(jié)果為   23H('#'),46H,41H,30H,2EH,34H,3DH,31H,2AH('*'),
;*              32H,31H,0DH,0AH,23H,46H,41H,30H,2EH,34H,3DH,
;*              30H,2AH,32H,30H,0DH,0AH
;*      部分程序已給出, 其中原始數(shù)據(jù)由過程LOAD從文件INPUT1.DAT
;*  中讀入SOURCE開始的內(nèi)存單元中。運算結(jié)果要求從RESULT開始存放,
;*  由過程SAVE保存到文件OUTPUT1.DAT中。
;*      填空BEGIN和END之間已給出的源程序使其完整(空白已用橫線標(biāo)
;*  出,每行空白一般只需一條指令, 但采用功能相當(dāng)?shù)亩鄺l指令亦可),
;*  或刪除BEGIN和END之間原有的代碼并自行編程來完成要求的功能。
;*      對程序必須進(jìn)行匯編,并與IO.OBJ鏈接產(chǎn)生PROG1.EXE執(zhí)行文件,
;*  最終運行程序產(chǎn)生結(jié)果(無結(jié)果或結(jié)果不正確者均不得分)。調(diào)試中
;*  若發(fā)現(xiàn)整個程序中存在錯誤之處, 請加以修改。
 
           EXTRN      LOAD:FAR,SAVE:FAR
N          EQU        14
STAC       SEGMENT    STACK
           DB         128 DUP (?)
STAC       ENDS
DATA       SEGMENT
SOURCE     DB         N DUP(?)
RESULT     DB         N+12 DUP(0)
NAME0      DB         'INPUT1.DAT',0
NAME1      DB         'OUTPUT1.DAT',0
DATA       ENDS
CODE       SEGMENT
           ASSUME     CS:CODE, DS:DATA, SS:STAC
START      PROC       FAR
           PUSH       DS
           XOR        AX,AX
           PUSH       AX
           MOV        AX,DATA
           MOV        DS,AX
           LEA        DX,SOURCE          ; 數(shù)據(jù)區(qū)起始地址
           LEA        SI,NAME0           ; 原始數(shù)據(jù)文件名
           MOV        CX,N               ; 字節(jié)數(shù)
           CALL       LOAD               ; 從 'INPUT1.DAT'中讀取數(shù)據(jù)
;  **** BEGIN ****
           MOV        SI,0
           MOV        DI,0
           MOV        BX,2               ; 兩個ASCII字符串
REPEAT:    MOV        CX,7               ; 每個字符串由7個ASCII字符組成
           mov        al,'#'
          ;MOV        AL,___
           MOV        RESULT[DI],AL
           INC        DI
           mov        ah,0
          ;MOV        AH,___
CHAR:      MOV        AL,SOURCE[SI]
           MOV        RESULT[DI],AL
           INC        DI
           INC        SI
           XOR        AH,AL
           loop       char
          ;LOOP       ________
           mov        al,'*'
          ;MOV        AL,___
           MOV        RESULT[DI],AL
           INC        DI
           MOV        DH,2
           MOV        DL,AH               ; 異或結(jié)果暫存在DL中
           MOV        CL,4                ; 先將異或結(jié)果高4位轉(zhuǎn)換成ASDCII字符
           SHR        AH,CL
CHANGE:    CMP        AH,10               ; 本行開始的4行語句將一個十六進(jìn)制數(shù)
                                          ; 轉(zhuǎn)換為ASCII碼
           JL         ADD_0
           ADD        AH,'A'-'0'-10
ADD_0:     ADD        AH,'0'
           MOV        RESULT[DI],AH
           INC        DI
           DEC        DH
           JZ         EXT
           MOV        AH,DL               ; 再將異或結(jié)果低4位轉(zhuǎn)換成ASDCII字符
           AND        AH,0FH
           JMP        CHANGE
EXT:       mov        al,0dh
          ;MOV        AL,___
           MOV        RESULT[DI],AL
           INC        DI
           mov        al,0ah
          ;MOV        AL,___
           MOV        RESULT[DI],AL
           INC        DI
           DEC        BX
           jz         exit
          ;JZ         ______
           JMP        REPEAT
EXIT:      NOP
;  ****    END  ****
           LEA        DX,RESULT          ; 結(jié)果數(shù)據(jù)區(qū)首址
           LEA        SI,NAME1           ; 結(jié)果文件名
           MOV        CX,N+12            ; 結(jié)果字節(jié)數(shù)
           CALL       SAVE               ; 保存結(jié)果到文件
           RET
START      ENDP
CODE       ENDS
           END        START

 

input1.dat 內(nèi)容如下:
46 41 30 2E 33 3D 31 0A 40 0A 40 0A 40 00
output1.dat 內(nèi)容應(yīng)當(dāng)如下:
23 46 41 30 2E 33 3D 31 2A 32 36 0D 0A 23 0A 40
0A 40 0A 40 00 2A 34 41 0D 0A

上機(jī)題之30
以下內(nèi)容為程序代碼:

;*      請編制程序PROG1.ASM, 其功能是: 內(nèi)存中連續(xù)存放著16個十
;*  六位二進(jìn)制數(shù),在原16個數(shù)的第4和第5個數(shù)之間插入00FFH,在原
;*  16個數(shù)的第8和第9個數(shù)之間插入FF00H,在原16個數(shù)的第12和第13
;*  個數(shù)之間插入55AAH, 在原16個數(shù)的最后加入AA55H。將按上述方
;*  法插入4個數(shù)后得到的20個數(shù)存入內(nèi)存中。
;*      例如:
;*      內(nèi)存中有 1020H,2002H,3033H,4440H,5008H,…,8FF8H
;*  (共16個字)
;*      結(jié)果為   1020H,2002H,3033H,4440H,00FFH,5008H,…,8FF8H,
;*  AA55H(共20個字)
;*      部分程序已給出,其中原始數(shù)據(jù)由過程LOAD從文件INPUT1.DAT
;*  中讀入SOURCE開始的內(nèi)存單元中。運算結(jié)果要求從RESULT開始存放,
;*  由過程SAVE保存到文件OUTPUT1.DAT中。
;*      填空BEGIN和END之間已給出的源程序使其完整 (空白已用橫線
;*  標(biāo)出,每行空白一般只需一條指令,但采用功能相當(dāng)?shù)亩鄺l指令亦
;*  可),或刪除BEGIN和END之間原有的代碼并自行編程來完成要求的功
;*  能。
;*      對程序必須進(jìn)行匯編, 并與IO.OBJ鏈接產(chǎn)生PROG1.EXE執(zhí)行文
;*  件,最終運行程序產(chǎn)生結(jié)果(無結(jié)果或結(jié)果不正確者均不得分)。調(diào)
;*  試中若發(fā)現(xiàn)整個程序中存在錯誤之處,請加以修改。

           EXTRN      LOAD:FAR,SAVE:FAR
N          EQU        16
STAC       SEGMENT    STACK
           DB         128 DUP (?)
STAC       ENDS        
DATA       SEGMENT     
SOURCE     DW         N DUP(?)
INDATA     DW         0AA55H,55AAH,0FF00H,00FFH
RESULT     DW         N+4 DUP(0)
NAME0      DB         'INPUT1.DAT',0
NAME1      DB         'OUTPUT1.DAT',0
DATA       ENDS       
CODE       SEGMENT   
           ASSUME     CS:CODE, DS:DATA, SS:STAC
START      PROC       FAR
           PUSH       DS
           XOR        AX,AX
           PUSH       AX
           MOV        AX,DATA
           MOV        DS,AX
           LEA        DX,SOURCE          ; 數(shù)據(jù)區(qū)起始地址
           LEA        SI,NAME0           ; 原始數(shù)據(jù)文件名
           MOV        CX,N*2             ; 字節(jié)數(shù)
           CALL       LOAD               ; 從 'INPUT1.DAT'中讀取數(shù)據(jù)
;  **** BEGIN ****
           MOV        SI,0
           mov        di,0
           ;_______________
           MOV        CX,4
           MOV        BX,8
CHAN:      MOV        AX,SOURCE[SI]
           mov        result[di],ax
          ;_______________________
           INC        SI
           inc        si
           inc        di
          ;_____________
          ;_____________
           INC        DI
           DEC        CX
           JZ         INSER1
           JMP        CHAN
INSER1:    PUSH       SI
           MOV        SI,BX
           MOV        AX,INDATA[SI-2]
           mov        result[di],ax
          ;MOV        RESULT[DI],__
           DEC        BX
           dec        bx
          ;_____________
           JZ         EXIT
           mov        cx,4
          ;MOV        CX,___
           POP        SI
           INC        DI
           inc        di
          ;_______________
           JMP        CHAN
EXIT:      POP        SI
;  ****  END  ****
           LEA        DX,RESULT         ; 結(jié)果數(shù)據(jù)區(qū)首址
           LEA        SI,NAME1           ; 結(jié)果文件名
           MOV        CX,(N+4)*2             ; 結(jié)果字節(jié)數(shù)
           CALL       SAVE              ; 保存結(jié)果到文件
           RET
START      ENDP
CODE       ENDS
           END        START

 


input1.dat 內(nèi)容如下:
34 12 FF E0 0D 23 78 AC AE EA 15 86 F0 05 7F F7 11 FE DD 3E ED DD 33 55 CC CC 11 22 33 DC A0 0A
output1.dat 內(nèi)容應(yīng)當(dāng)如下:
34 12 FF E0 0D 23 78 AC FF 00 AE EA 15 86 F0 05
7F F7 00 FF 11 FE DD 3E ED DD 33 55 AA 55 CC CC
11 22 33 DC A0 0A 55 AA

文章錄入:ak47    責(zé)任編輯:ak47  
 版權(quán)聲明
   如果本網(wǎng)站所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請與我們聯(lián)系,我們將會及時處理。如轉(zhuǎn)載本網(wǎng)內(nèi)容,請注明出處。
 發(fā)表評論
關(guān)于本站 網(wǎng)站聲明 廣告服務(wù)  聯(lián)系方式  付款方式  站內(nèi)導(dǎo)航  客服中心  友情鏈接   
Copyright © 2004-2006 考試吧 (Exam8.com) All Rights Reserved 
中國科學(xué)院研究生院中關(guān)村園區(qū)(北京市海淀區(qū))