大三上汇编语言考试题(***)

前言

本文汇集北京理工大学大三汇编考试题(***)的部分内容,大部分源于网络,小部分自己修改,谨慎参考。

警告

本文仅用于学习交流,未经本人同意,不得转载。

没用的话

同时欢迎大家交流讨论,但是考完上机估计我就不想再看这些东西了,男的女的折磨,markdown貌似不支持汇编高亮,就这样吧。注释是我自己乱注的,慎看。
(还是要用冲击3星的梦想的,直接1星总觉得不甘心)

题1

现有一组字符串为data,name,time,file,code,path,user,exit,quit,text,请编写程序从键盘输入4个字符的字符串,若存在将其修改为disk, 并将结果在显示器上显示

思路

这道题还是较为容易的,没想好写啥,一个一个比。注意下

MOV AH,0AH
INT 21H

第一个字节存的是缓冲区最大容量
第二个字节存的是实际字符数

参考代码
DATAS SEGMENT
    BUF1 db 'data,name,file,code,path,user,exit,quit,text','$'
    BUF2 db 100
    db ?
    db 100 dup (?) 
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV ES,AX        ;用di,si就写
    ;输入字符进入缓冲区
    LEA DX,BUF2
    MOV AH,0AH
    INT 21H
    ;输入回车,双行数据
    MOV DL,0AH
    MOV AH,02H
    INT 21H
    
    LEA SI,BUF1
    LEA DI,BUF2[2] 
    
    MOV CH,44       ;字符个数
    MOV CL,4        ;一组字符的个数
    CLD
ZONGCHULI:          ;判断是否比较完所有字符
    CMP CH,0
    JE END0
    
NEXTZIMU:
    CMPSB
    JNE NEXTWORD ;如果第一个字符都不相等,直接跳转到下一个字符 
    JMP AGAIN    ;如果第一个字符相等,继续比较
AGAIN:
    DEC CH
    DEC CL
    CMP CL,0
    JNE NEXTZIMU
    CALL CHANGE
    ;INC SI
    JMP ZONGCHULI
NEXTWORD:
    CMP CL,0    ;CL=0 找到相同的字符串
    JE A
    INC SI
    DEC CL
    DEC CH
    JMP NEXTWORD
A:  MOV CL,04H
    ; DEC CH
    LEA DI,BUF2[2]
    JMP ZONGCHULI
CHANGE PROC NEAR
    MOV BUF1[SI-4],'d'
    MOV BUF1[SI-3],'i'
    MOV BUF1[SI-2],'s'
    MOV BUF1[SI-1],'k'
    MOV CL,04H
    LEA DI,BUF2[2]
    RET
CHANGE ENDP
    
END0:
    LEA DX,BUF1
    MOV AH,09H
    INT 21H
    
    MOV AH,4CH
    INT 21H
CODES ENDS
 END START

题2

现有一组字符串为data,name,time,file,code,path,user,exit,quit,text,请编写程序从键盘输入4个字符的字符串,若存在将其删除, 并在显示器上显示。

思路

逐词判断,不同就打印,同就不打印

参考代码
DATAS SEGMENT
    BUF1 db 'data,name,file,code,path,user,exit,quit,text','$'
    BUF2 db 100 
    db ?
    db 100 dup(?) 
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV ES,AX
    
    LEA DX,BUF2
    MOV AH,0AH
    INT 21H
    
    MOV DL,0AH
    MOV AH,02H
    INT 21H
    
    MOV CH,9H
    MOV CL,4H
    CLD
    
    LEA SI,BUF1
    LEA DI,BUF2[2]
    
ZONGCHULI:
    CMP CH,0
    JE END0
NEXTZIMU:
    CMPSB
    JNZ NEXTWORD
    DEC CL
    CMP CL,0
    JE CHANGE
    JMP NEXTZIMU
NEXTWORD:
    CMP CL,0    ;CL=0 找到相同的字符串
    JE DAYIN
    INC SI
    DEC CL
    ;DEC CH
    JMP NEXTWORD
DAYIN:  
    MOV DL,BUF1[SI-5]
    MOV AH,02H
    INT 21H
    
    MOV DL,BUF1[SI-4]
    MOV AH,02H
    INT 21H
    
    MOV DL,BUF1[SI-3]
    MOV AH,02H
    INT 21H
    
    MOV DL,BUF1[SI-2]
    MOV AH,02H
    INT 21H
    
    CMP BUF1[SI-1],'$'
    JE END0
    
    MOV DL,BUF1[SI-1]
    MOV AH,02H
    INT 21H
    
    MOV CL,04H
    LEA DI,BUF2[2]
    DEC CH
    JMP ZONGCHULI
    
CHANGE:
    INC SI
    DEC CH
    MOV CL,4
    LEA DI,BUF2[2]
    JMP ZONGCHULI
END0:

    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

题3

在多模块设计中,主模块中调用内部模块buf1,buf2,buf3,buf4。主模块根据键盘输入的指令(如:a,b,c,d)调用上述对应的子程序,每个子程序的任务是显示其入口地址。调用后继续等待调用,若输入ESC键(ASCII码为1BH)则结束程序的执行。请编写完成该任务的程序。

思路

注意END MAIN 和十六进制显示

参考代码
DATAS SEGMENT
    BUF DW BUF1,BUF2,BUF3,BUF4  
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
    
;编写主程序
MAIN PROC NEAR ;FAR??
    START:
    MOV AX,DATAS
    MOV DS,AX
    
L:  MOV AH,01H
    INT 21H
    
    ;和ESC键比较
    CMP AL,1BH
    JE END0
    ;关键字比较
    CMP AL,'a'
    JE ISA
    CMP AL,'b'
    JE ISB
    CMP AL,'c'
    JE ISC
    CMP AL,'d'
    JE ISD
    
    JMP L    ;寻找下一个关键字
ISA:
    MOV DL,0AH
    MOV AH,02H
    INT 21H
    
    MOV DL,0DH
    MOV AH,02H
    INT 21H
    ;换行回车/ENTER
    
    CALL BUF1  ;调用buf1子程序
    JMP L
ISB:
    MOV DL,0AH
    MOV AH,02H
    INT 21H
    
    MOV DL,0DH
    MOV AH,02H
    INT 21H
    ;换行回车/ENTER
    
    CALL BUF2  ;调用buf2子程序
    JMP L
ISC:
    MOV DL,0AH
    MOV AH,02H
    INT 21H
    
    MOV DL,0DH
    MOV AH,02H
    INT 21H
    ;换行回车/ENTER
    
    CALL BUF3  ;调用buf3子程序
    JMP L
ISD:
    MOV DL,0AH
    MOV AH,02H
    INT 21H
    
    MOV DL,0DH
    MOV AH,02H
    INT 21H
    ;换行回车/ENTER
    
    CALL BUF4  ;调用buf4子程序
    JMP L
END0:
    MOV AH,4CH
    INT 21H
    RET
MAIN ENDP

    BUF1 PROC NEAR
    MOV BX,OFFSET BUF1  ;BX真的稳
    CALL DISP ;调用显示程序
    RET
    BUF1 ENDP

    BUF2 PROC NEAR
    MOV BX,OFFSET BUF2  ;BX真的稳
    CALL DISP ;调用显示程序
    RET
    BUF2 ENDP

    BUF3 PROC NEAR
    MOV BX,OFFSET BUF3  ;BX真的稳
    CALL DISP ;调用显示程序
    RET
    BUF3 ENDP

    BUF4 PROC NEAR
    MOV BX,OFFSET BUF4  ;BX真的稳
    CALL DISP ;调用显示程序
    RET
    BUF4 ENDP

    ;显示
DISP PROC NEAR
MOV CH,4   ;16b
L1:
MOV CL,4
ROL BX,CL
MOV AL,BL
AND AL,0FH ;取低四位
CMP AL,9
JBE SHUZI
ADD AL,7   ;字母+7
SHUZI:
ADD AL,30H
MOV DL,AL
MOV AH,02H
INT 21H
DEC CH
CMP CH,0
JNZ L1
MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,0DH
MOV AH,02H
INT 21H
RET
DISP ENDP
CODES ENDS
    ;个人猜测 定义主程序要把END START 换成END MAIN
    END MAIN

题4

现有一控制程序共5个工序,要求输入0-4的序号,分别执行各工序的子程序,每个子程序的任务是显示其入口地址。调用后继续等待调用,按回车则结束程序的执行。

思路

上题改一改就完事了

参考代码
DATAS SEGMENT
    BUF DW BUF1,BUF2,BUF3,BUF4,BUF5
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
    
;编写主程序
MAIN PROC NEAR ;FAR??
    START:
    MOV AX,DATAS
    MOV DS,AX
    
L:  MOV AH,01H
    INT 21H
    
    ;和回车键比较
    CMP AL,0DH
    JE END0
    ;关键字比较
    CMP AL,'0'
    JE ISA
    CMP AL,'1'
    JE ISB
    CMP AL,'2'
    JE ISC
    CMP AL,'3'
    JE ISD
    CMP AL,'4'
    JE ISE
    
    JMP L    ;寻找下一个关键字
ISA:
    MOV DL,0AH
    MOV AH,02H
    INT 21H
    
    MOV DL,0DH
    MOV AH,02H
    INT 21H
    ;换行回车/ENTER
    
    CALL BUF1  ;调用buf1子程序
    JMP L
ISB:
    MOV DL,0AH
    MOV AH,02H
    INT 21H
    
    MOV DL,0DH
    MOV AH,02H
    INT 21H
    ;换行回车/ENTER
    
    CALL BUF2  ;调用buf2子程序
    JMP L
ISC:
    MOV DL,0AH
    MOV AH,02H
    INT 21H
    
    MOV DL,0DH
    MOV AH,02H
    INT 21H
    ;换行回车/ENTER
    
    CALL BUF3  ;调用buf3子程序
    JMP L
ISD:
    MOV DL,0AH
    MOV AH,02H
    INT 21H
    
    MOV DL,0DH
    MOV AH,02H
    INT 21H
    ;换行回车/ENTER
    
    CALL BUF4  ;调用buf4子程序
    JMP L
    
ISE:
    MOV DL,0AH
    MOV AH,02H
    INT 21H
    
    MOV DL,0DH
    MOV AH,02H
    INT 21H
    ;换行回车/ENTER
    
    CALL BUF5  ;调用buf4子程序
    JMP L
END0:
    MOV AH,4CH
    INT 21H
    RET
MAIN ENDP

    BUF1 PROC NEAR
    MOV BX,OFFSET BUF1  ;BX真的稳
    CALL DISP ;调用显示程序
    RET
    BUF1 ENDP

    BUF2 PROC NEAR
    MOV BX,OFFSET BUF2  ;BX真的稳
    CALL DISP ;调用显示程序
    RET
    BUF2 ENDP

    BUF3 PROC NEAR
    MOV BX,OFFSET BUF3  ;BX真的稳
    CALL DISP ;调用显示程序
    RET
    BUF3 ENDP

    BUF4 PROC NEAR
    MOV BX,OFFSET BUF4  ;BX真的稳
    CALL DISP ;调用显示程序
    RET
    BUF4 ENDP
    
    BUF5 PROC NEAR
    MOV BX,OFFSET BUF5  ;BX真的稳
    CALL DISP ;调用显示程序
    RET
    BUF5 ENDP

    ;显示
DISP PROC NEAR
MOV CH,4   ;16b
L1:
MOV CL,4
ROL BX,CL
MOV AL,BL
AND AL,0FH ;取低四位
CMP AL,9
JBE SHUZI
ADD AL,7   ;字母+7
SHUZI:
ADD AL,30H
MOV DL,AL
MOV AH,02H
INT 21H
DEC CH
CMP CH,0
JNZ L1
MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,0DH
MOV AH,02H
INT 21H
RET
DISP ENDP
CODES ENDS
    ;个人猜测 定义主程序要把END START 换成END MAIN
    END MAIN

题5

一个有符号字数组以0为结束标志,编程求这个数组的最大值、 最小值、平均值。

思路

难点在于平均值的求取,有空补上详细思路

参考代码
DATAS SEGMENT
    BUF DW 6FFFH,7FFFH,0
    
    MAX DW 0000H
    MIN DW 0000H
    EVA DW 0000H
    
    NUM DW 16
    OPT DB 'THE MAX IS '
    OMAX DB '0000H',0DH,0AH,'THE MIN IS '
    OMIN DB '0000H',0DH,0AH,'THE EVA IS '
    OEVA DB '0000H$'
    
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
MAIN PROC NEAR
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    
    CALL FMAX
    CALL FMIN
    CALL FEVA
    CALL TRAN
    
    LEA DX,OPT
    MOV AH,09H
    INT 21H
    
    MOV AH,4CH
    INT 21H
MAIN ENDP

FMAX PROC NEAR
     MOV AX,BUF
     LEA BX,BUF+2
F1:  MOV DX,[BX]
     CMP DX,0
     JE EMAX
     CMP AX,DX
     JG NMAX
     MOV AX,DX
NMAX:
     ADD BX,2
     JMP F1
EMAX:
     MOV MAX,AX
     RET
FMAX ENDP

FMIN PROC NEAR
     MOV AX,BUF
     LEA BX,BUF+2
F2:  MOV DX,[BX]
     CMP DX,0
     JZ EMIN
     CMP AX,DX
     JL NMIN
     MOV AX,DX
NMIN:
     ADD BX,2
     JMP F2
EMIN: 
     MOV MIN,AX
     RET
FMIN ENDP

FEVA PROC NEAR
     MOV AX,BUF
     MOV CX,1
     ;MOV DX,0
     MOV DI,0
     LEA SI,BUF+2
F3:  
     MOV BX,[SI]
     CMP BX,0
     JE EEVA
     JG NF3
     ADD DI,1
NF3:
     ADD AX,BX
     ADC DX,0
     ADD SI,2
     INC CX
     JMP F3
EEVA:
     SUB DX,DI
     IDIV CX
     MOV EVA,AX
     RET
FEVA ENDP

TRAN PROC NEAR
     MOV AX,MAX
     LEA BX,OMAX+3
     CALL TRANS
     
     MOV AX,MIN
     LEA BX,OMIN+3
     CALL TRANS
     
     MOV AX,EVA
     LEA BX,OEVA+3
     CALL TRANS
     
     RET
TRAN ENDP

TRANS PROC NEAR
     MOV CX,4
L1:
     MOV DX,0
     DIV NUM
     CMP DL,9
     JNA NEXT
     ADD DL,7
NEXT: 
     ADD [BX],DL
     DEC BX
     LOOP L1
     RET
TRANS ENDP

CODES ENDS
    END MAIN

题6

在BUFFER中定义了的十个带符号字,将其中的负数变成绝对值,并以十进制方式输出。

思路

没啥好说的,看第五题

参考代码
ASSUME CS:CODES,DS:DATAS
DATAS SEGMENT
    BUFFER DW 0FFFEH,-5555,-4444,-3333,-2222,-1111,0,11111,22222,5333
    ;10个数20个字节
    RST DB 5 DUP(?);14H开始
    KONG DB 0DH,0AH,'$';用于显示回车换行
DATAS ENDS

CODES SEGMENT
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV SI,0;与BUFFER配合使用用来处理数据
    MOV CX,10
COMP:
    MOV DI,0;指向RST的第一位
    CMP BUFFER[SI],0
    JGE ISPOS;判断是否为非负数
    NEG BUFFER[SI];如果是负数执行这步,如果不是跳过去
ISPOS:
	MOV BX,10
	MOV AX,BUFFER[SI];将待处理的数移入AX
TOTEN:	
	;CWD;扩展成双字型数据(AX)->(DX)+(AX)相当于把(DX)清零
	MOV DX,0
	DIV BX;(BX) = 0AH相当于不断除以10余数保存在DX里
	;AND DL,0FH;0FH = 1111B
	ADD DL,30H;(DL)+30H转换为asc码
	MOV RST[DI],DL;保存asc码
	INC DI
	CMP AX,0;字符是否全部处理完
	JNE TOTEN
PRINT:	
	DEC DI;因为四个数字都是一样的
	MOV DL,RST[DI]
	MOV AH,02H;显示
	INT 21H
	
	CMP DI,0
	JNE PRINT;打印这5个字节的asc码
	LEA DX,KONG;显示回车换行
	MOV AH,09H
	INT 21H
	ADD SI,2;处理下一个字节
    LOOP COMP
    
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

题7

已知数组A包含20个互不相等的字型整数,数组B包含30个互不相等的字型整数,试编制一程序把在A中而不在B中出现的整数放于数组C中。

思路

一个一个比 这个简单 清0 永远滴神

参考代码
DATAS SEGMENT
     BUFA DW 0000H,0011H,0022H,0033H,0044H,0055H,0066H,0077H,0088H,0099H;不加,
          DW 7777H,7777H,7777H,7777H,7777H,7777H,7777H,7777H,7777H,7777H 
     BUFB DW 0000H,0011H,0022H,0033H,0044H,0055H,0066H,0077H,0088H,0099H
          DW 1011H,1022H,1033H,1044H,1055H,1066H,1077H,1088H,1099H,1000H
          DW 2011H,2022H,2033H,2044H,2055H,2066H,2077H,2088H,2099H,2000H
     BUFC DW 20 DUP(0) ;最多就是20
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV ES,AX
    ;清0,YYDS
    MOV SI,0
    MOV DI,0
    MOV BX,0
    ;清0,YYDS
COMPARE:
    MOV AX,BUFA[SI]
    MOV CX,BUFB[DI]
    CMP AX,CX
    JNE BNEXT
ANEXT:
    ADD SI,2
    CMP SI,40
    JE END0
    
    MOV DI,0
    JMP COMPARE
BNEXT:
    ADD DI,2
    CMP DI,60
    JE LOADC
    JMP COMPARE
LOADC:
    MOV BUFC[BX],AX
    ADD BX,2
    JMP ANEXT
END0:
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

题8

已知数组A包含20个互不相等的字型整数,数组B包含30个互不相等的字型整数,试编制一程序把既在A中又在B中出现的数存放于数组C中。

思路

同上吧,感觉没什么复杂逻辑

参考代码
DATAS SEGMENT
     BUFA DW 0000H,0011H,0022H,0033H,0044H,0055H,0066H,0077H,0088H,0099H;不加,
          DW 7777H,7777H,7777H,7777H,7777H,7777H,7777H,7777H,7777H,7777H 
     BUFB DW 0000H,0011H,0022H,0033H,0044H,0055H,0066H,0077H,0088H,0099H
          DW 1011H,1022H,1033H,1044H,1055H,1066H,1077H,1088H,1099H,1000H
          DW 2011H,2022H,2033H,2044H,2055H,2066H,2077H,2088H,2099H,2000H
     BUFC DW 20 DUP(0) ;最多就是20
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV ES,AX
    ;清0,YYDS
    MOV SI,0
    MOV DI,0
    MOV BX,0
    ;清0,YYDS
COMPARE:
    MOV AX,BUFA[SI]
    MOV CX,BUFB[DI]
    CMP AX,CX
    JE LOADC
    JMP BNEXT
BNEXT:
    ADD DI,2
    CMP DI,60
    JE ANEXT
    JMP COMPARE
ANEXT:
    ADD SI,2
    CMP SI,40
    JE END0
    
    MOV DI,0
    JMP COMPARE
LOADC:
    MOV BUFC[BX],AX
    ADD BX,2
    JMP ANEXT
END0:
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

题9

判断一个不超过65535的整数是否为质数。

思路

判断质数的方法:

  1. 0 1 2直接就是质数
  2. BUF 放在bx 中,不是的话bx-1
  3. buf/bx DX=0 不是
  4. DX≠0 直到DX=1 是
参考代码
DATAS SEGMENT
    BUF DW 8
    YES DB 'YES','$'
    NO  DB 'NO','$' 
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    
    MOV BX,BUF
    CMP BX,2
    JBE SHI ;小于等于2 必定是质数
    DEC BX   ;BX-1
    
LOOP1:
    CMP BX,1
    JE SHI
    MOV AX,BUF
    MOV DX,0
    DIV BX
    CMP DX,0
    JE BUSHI
    DEC BX
    JMP LOOP1
BUSHI:
    LEA DX,NO
    MOV AH,9
    INT 21H
    JMP END0
SHI:
    LEA DX,YES
    MOV AH,9
    INT 21H
    JMP END0
END0:
    
    
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

题10

在内存中定义一个用于加密的key和明文字符串,key中的每个数字表示将明文字符串中的对应字符进行旋转移位的次数,负数表示左移位,正数表示右移位。加密key的长度为10个字节:-2, 4, 1, 0, -3, 5, 2, -4, -4, 6。先用加密key处理字符串的前10个字节,再处理接下来的10个字节,以此类推。将密文字符串保存在另一个变量中。

思路

暂无 待补充

参考代码
DATAS SEGMENT
      BUF1 DB 'ABCDEFGHIJABCDEFGHIJ'
      l1 equ $-BUF1
      BUF2 DB -2,4,1,0,-3,5,2,-4,-4,6
      l2 db 10
      BUF3 DB 100 DUP(?)
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV ES,AX
    
    MOV SI,0
    MOV DI,0
    
    MOV BH,l1
    MOV BL,l2
    
L:
    MOV AH,BUF1[SI]
    MOV AL,BUF2[DI]
    CMP AL,0
    JL ZUO 
    MOV CL,AL
    ROR AH,CL
    MOV BUF3[SI],AH
    JMP NEXT
ZUO:
    NEG AL
    MOV CL,AL
    ROL AH,CL
    MOV BUF3[SI],AH
    JMP NEXT
NEXT:
    DEC BL
    DEC BH
    CMP BH,0
    JE END0
    INC SI
    CMP BL,0
    JE L3
    INC DI
    JMP L
L3:
    MOV DI,0
    MOV BL,l2
    JMP L
END0:
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

题11

在内存中定义一个用于加密的key和明文字符串,用这个key的每个字符依次和明文字符串的对应字符进行异或操作得到密文字符串,并将密文字符串保存在另一个变量中。例如:key为“ABXmv#7”
在这里插入图片描述

思路

最简单的一道,没啥说的,再补充吧

参考代码
DATAS SEGMENT
    BUF1 DB 'ABCDEFGHIJ'
    l1 equ $-BUF1
    BUF2 DB 'ABXmv#7'
    l2 equ $-BUF2
    BUF3 DB 100 DUP(?)
DATAS ENDS 

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV ES,AX
    
    MOV SI,0
    MOV DI,0
CHULI
    MOV AH,BUF1[SI]
    MOV AL,BUF2[DI]
    XOR AH,AL
    MOV BUF3[SI],AH
    
    INC SI
    CMP SI,l1
    JE END0
    INC DI
    CMP DI,l2
    JE HUI
    JMP CHULI
HUI:
    MOV DI,0
    JMP CHULI
ENDO:
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START
  • 7
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
汇编语言是一种低级编程语言,它直接对应于计算机的机器语言,但使用了人类可读的助记符和符号来替代机器语言中的二进制指令和地址。以下是关于汇编语言的详细说明: ### 基本概念与特性 1. **机器相关性**: - **面向特定体系结构**:汇编语言是为特定计算机体系结构(如x86、ARM、MIPS等)设计的,每种体系结构都有其专属的汇编语言。这意味着汇编程序通常不能直接在不同类型的处理器上运行,不具备源代码级别的可移植性。 2. **指令与操作码**: - **助记符表示**:汇编语言使用助记符(mnemonics)来代表特定的机器指令,这些助记符往往与指令的功能相关,如`MOV`(移动数据)、`ADD`(加法)、`JMP`(跳转)等。每个助记符对应一个特定的二进制操作码。 3. **低级操作**: - **直接硬件控制**:汇编语言允许程序员直接操控硬件资源,如寄存器、内存地址、I/O端口等,这使得它非常适合编写对时间和空间效率要求极高、需要精确控制硬件的程序,如设备驱动、实时系统内核、性能关键算法等。 4. **代码效率**: - **紧凑的代码**:汇编程序生成的目标代码通常比高级语言编译后的代码更为紧凑,占用内存较少。 - **快速执行**:由于直接对应于机器指令,汇编程序在执行时无需经过复杂的解释或编译过程,能够快速、高效地被执行。 5. **编写与调试难度**: - **复杂性高**:编写汇编程序需要深入了解计算机体系结构和指令集细节,即使是简单的任务也可能需要大量的指令。此外,程序逻辑的表述不如高级语言直观,容易出错且难以阅读和维护。 - **调试挑战**:由于代码高度依赖具体的硬件状态,调试汇编程序可能非常困难,尤其是在处理复杂的控制流、数据依赖性和异常处理时。 6. **工具支持**: - **汇编器**:汇编语言源代码通过汇编器(assembler)转换成机器语言(机器码或二进制码),汇编器负责将助记符和符号地址解析为具体的机器指令和物理地址。 - **链接器**:生成的机器码通常需要链接器(linker)进行链接,将多个目标文件合并为一个可执行文件,同时解决外部符号引用。 ### 应用场景与优势 汇编语言主要应用于以下几个方面: - **系统级编程**:操作系统内核、设备驱动、中断服务程序等底层软件开发,这些领域要求对硬件有精细控制,且性能要求高。 - **性能优化**:在高级语言编写的程序中,对性能敏感的部分可以用汇编重写以提升效率。 - **反病毒与安全研究**:理解和编写汇编代码有助于分析恶意软件行为、逆向工程及编写防病毒软件。 - **教学与理解计算机原理**:学习汇编语言有助于深入理解计算机体系结构、指令集、内存管理和硬件接口等基础概念。 ### 编程特点与挑战 - **手动管理内存**:程序员需要手动分配和释放内存,跟踪数据在内存中的位置,处理堆栈、堆和静态内存区域。 - **无高级抽象**:缺乏高级语言中的类、对象、函数库等高级抽象概念,所有编程结构如循环、条件分支等都需要手工实现。 - **依赖特定硬件**:汇编程序直接依赖于特定处理器的指令集、寄存器组织和寻址模式,更换硬件平台通常意味着重新编写代码。 尽管汇编语言具有上述挑战,但它在特定场景下提供了无可比拟的优势,如极高的执行效率、对硬件资源的精确控制以及在安全和反病毒领域的应用。随着编译器技术的进步,许多高级语言也能生成高效的目标代码,但在某些对性能和硬件控制有严格要求的情况下,汇编语言仍然是不可或缺的工具。
### 回答1: 北邮大三下Linux期末考试是一门对学生的Linux系统操作能力和运维技能进行考核的课程。该考试主要围绕Linux系统的安装、配置、管理和维护等方面展开。下面我将从考试形式、内容和学生准备等方面展开回答。 首先,北邮大三下Linux期末考试的形式通常为闭卷考试,采用笔试形式进行。学生需要回答一些与Linux系统相关的理论知识和实际应用操作题目,以展示他们的理论基础和实践能力。 其次,考试内容主要包括Linux系统安装与配置、用户和组管理、文件系统管理、网络设置和服务配置、系统监控和故障处理等方面。学生需要熟悉Linux操作系统的基本命令和常用工具,了解常见的系统配置文件和目录结构,掌握Linux系统的常见任务和操作步骤。 对于考生来说,为了更好地应对考试,他们应提前准备。首先,需要系统学习Linux操作系统的相关知识,包括命令行操作、文件管理、网络配置等。可以通过阅读教材、参加课堂讲解和实验、利用网络资源等途径进行学习。同时,多进行实践练习,通过自己动手操作来加深理解和掌握。 此外,还可以参加相关的考前辅导班或小组讨论,与同学们共同学习和交流经验。可以通过解决一些实际问题和案例,提高对Linux系统的理解和应用能力。还可以利用模拟考试等方式进行自测,提前熟悉考试形式和内容,提高应试能力。 综上所述,北邮大三下Linux期末考试是对学生Linux系统操作能力和运维技能的考核,内容涵盖安装配置、管理和维护等方面。学生需要通过系统学习、实践练习和学习小组的方式备考。通过这些准备措施,学生可以更好地应对考试,取得满意的成绩。 ### 回答2: 北邮大三下的Linux期末考试是一门重要的课程,旨在检验学生对Linux操作系统和相关知识的掌握程度。这门考试涵盖了课程内容的各个方面,包括Linux的基本操作、文件系统管理、用户权限管理、网络配置、系统维护等。 考试形式一般为闭卷考试,学生需要在规定的时间内回答一系列选择题、填空题和简答题。选择题主要考察对Linux命令的理解和运用能力,学生需要根据给定的情景选择正确的操作命令。填空题则要求学生根据题目提示,填写相应的命令或参数。简答题较为开放,学生需要对Linux操作系统的基本原理、特点以及相关应用进行简要的描述。 为了应对这门考试,学生需要提前准备和复习。首先,要熟悉Linux的基本命令和常用操作。可以通过阅读教材、参考资料和在线资源来学习和练习。其次,要熟悉Linux的文件系统结构和权限管理,了解不同用户和用户组的权限设置以及目录的层级关系。此外,还要熟悉网络配置和系统维护相关的知识,包括网络设备的配置、服务的启动和停止、系统日志的查看和管理等。 在考试中,要认真阅读题目,理解题目要求,并注意答题时间。对于选择题,要仔细审题,选择最合适的答案。在填空题中,要注意命令的正确书写和参数的使用。对于简答题,要简洁明了地回答问题,突出重点。 总之,北邮大三下的Linux期末考试对学生的Linux操作系统知识的掌握能力进行了全面的考察。只有通过充分的复习和准备,才能在考试中取得良好的成绩。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值