汇编语言程序设计试题,汇编语言程序设计题目,在线等答案!!!急!
汇编语言程序设计试题,汇编语言程序设计题目,在线等答案!!!急!详细介绍
本文目录一览: 汇编语言编程题目?
data segment
team db 10 dup(?)
avr db 0
data ends
code segment
assume cs:code,ds:data
start: mov ax,seg data
mov es,ax
mov di,0
mov ds,ax
mov si,0
mov al,3
mov cx,10
cld
@1: stosb
inc al
loop @1
call aver
call dspal
mov ah,4ch
int 21h
;==================================
aver proc near
mov cx,10
cld
clc
mov bx,0
@p1: lodsb
add bl,al
adc bh,0
loop @p1
mov ax,bx
mov bl,10
div bl
mov avr,al
ret
aver endp
;===============================
DSPAL PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSHF
XOR AH,AH
XOR CX,CX
MOV BL,10
@DSPAL1:
DIV BL
INC CX
MOV DL,AH
XOR AH,AH
OR DX,30H
PUSH DX
CMP AL,0
JNE @DSPAL1
MOV AH,2
@DISPAL2:
POP DX
INT 21H
LOOP @DISPAL2
MOV DL,32
INT 21H
POPF
POP DX
POP CX
POP BX
POP AX
RET
DSPAL ENDP
;================================
code ends
end start
求汇编语言与程序设计高手来。我需要组一份汇编试题请高手给做下。谢谢。时间比较急。
1.设(DS)=2000H, (ES)=3000H, (SS)=4000H, (BX)=1000H, (BP)=1000H, (SI)=0001H, (DI)=0002H, (21000H)=1234H, (21002H)=5678H, (31000H)=9ABCH, (31002H)=0DEF0H, (41000H)=3456H, (41002H)=789AH, 计算下列各指令中源操作数的物理地址,并指出指令执行后AX寄存器的内容。
MOV AX, ES:[1000H] 物理地址 31000H (AX)=9ABCH
MOV AX, [BX] 物理地址 21000H (AX)=1234H
MOV AX,[BP+DI] 物理地址 21002H (AX)=5678H
MOV AX, [BX][SI] 物理地址 21001H (AX)=7812H
6.在下列程序段括号中,填入正确的答案。
DATA SEGMENT
BUF DB 12H,56H
DATA ENDS
7.指出下列指令错误原因,填入括号中。
A. MOV AX,BL ;源操作数与目标操作数长度不同
B. MOV CS,AX ;CS寄存器不能作为目标操作数
C. DEC GAMA[BX] ;必须显示指明目标操作数的长度(使用BYTE PTR、WORD PTR等修饰符)
D. MOV ES,5600H ;以段寄存器作为MOV指令的目标操作数时,源操作数不能是立即数
E. SUB AX,DS ;段寄存器不可作为运算类指令的源操作数
8.下列语句在存贮器中分别为变量分配多少字节?请填入括号中。
VR1 DW ? ;2字节
VR2 DW 4 DUP(?),2;10字节
CONT EQU 10 ;此为伪指令,CONT只是作为汇编阶段中表示数值10的标号,不是变量,因此不实际分配内存
9.设BX=1200H,SI=0002H,DS=3000H,(31200H)=50H,(31201H)=02H,(31202H)=OF7H,(31203H)=90H请写出下列各条指令单独执行后,有关寄存器及存储单元的内容,若该指令影响标志位,则指出其值。
A. DEC BYTE PTR〔1200H〕 ; 问:(31200)=4FH, CF=原来CF的值(DEC指令不影响CF标志)
B. SAR BYTE PTR [SI+1200H],1 ; 问:(31202H)=FBH,ZF=0
C. MOV AX,WORD PTR〔BX+SI〕 ;问:AX=90F7H,SF=原来SF的值(MOV指令不影响标志位)
2.每组写一条程序指令,使: (6分)
A. BX寄存器的低四位置1 OR BX,000FH 或者 OR BL,0FH
B. AX寄存器的低四位清0 AND AX,0FFF0H 或者 AND AL,0F0H
C. 用TEST指令测试DL寄存器的第3位和第6位是否同时为0。 TEST DL,01001000b(若结果ZF=0表示两者同时为0)
3.在某子程序的开始处要保护AX,BX,CX,DX四个寄存器信息,在子程序结束时要恢复这四个寄存器信息。例如: (4分)
;保护现场
PUSH AX
PUSH BX
PUSH CX
PUSH DX
;恢复现场
┇
┇
┇
试写出恢复现场时的指令序列。
POP DX
POP CX
POP BX
POP AX
1.对于下面的数据定义,各条MOV的指令单独执行后,有关寄存器的内容是什么?(5分)
FLDB DB ?
TAB1 DW 20 DUP(?)
TAB2 DB ‘ABCD’
(A) MOV AX,TYPE FLDB AX=1
(B) MOV AX,TYPE TAB1 AX=2
(C) MOV CX,LENGTH TAB1 CX=20
(D) MOV DX,SIZE TAB1 DX=40
(E) MOV CX,LENGTH TAB2 CX=1
下面程序段执行完后,AL的内容是什么? (5分)
MOV AL,10
ADD AL,AL
SHL AL,1
MOV BL,AL
SHL AL,1
ADD AL,BL
结果AL=0C0H
3试问下面的程序段完成的功能是什么? (5分)
SAL AX,1
RCL DX,1
5.已知程序段:
STRING DB ‘ABCDEFGHIJ’
┇
MOV AH,01 ;从键盘输入字符1~9
INT 21H
AND AL,0FH
DEC AL
XOR AH,AH
MOV BX,OFFSET STRING
ADD BX,AX
MOV DL,[BX]
MOV AH,02H ;显示输出
INT 21H
┇
试回答: (1)上述程序段的功能是什么?
(2)如从键盘输入字符‘4’,程序段有什么结果?(6分)
答:(1)上述程序段功能是从键盘输入一个字符,假定该字符是1-9,则输出STRING中这个数值所对应的字母(1对应A,2对应B……)
(2)输入4则输出D
汇编语言程序设计题目
一、改错(只能对每条错误指令的一个操作数进行修改)。(共10分,每小题1分)
1. MOV BX,AL 改正: MOV BX,BX
2. MOV AX, A999H 改正:MOV AX,0A999H
3. MOV AL, 1234 改正:MOV AX,1234
4. MOV AX, [CX] 改正:MOV AX,[BX]
5. MOV DS, 1000H 改正:MOV AX,1000H MOV DS,AX
6. ADD [BX],10 改正: ADD BYTE PTR [BX],10
8. PUSH AH 改正:PUSH AX
9. INC [BP] 改正:INC BYTE PTR [BP]
9. MOV [DI],WORD PTR [SI] 改正:MOV DI,WORD PTR [SI]
10. MUL 10 改正:MOV CX,10 MUL CX
AX是改单片机的累加器或者工作寄存器吗?
汇编语言程序设计题
我写的有点长,经验证,运行无误。
代码贴在:任意两个10位以内十六进制数求和
http://tieba.baidu.com/f?kz=681706003
如是能用的,请顶一下。
为了方便修改,新代码直接贴在我的百度空间。
新代码添加了无输入处理和清除前导空格指令。
经验证,无楼主提到的‘1111111111+1111111111=42222222222’
的BUG,显示运算结果准确。
附言:21H的10号(0AH)功能,无法滤除:G~Z,所以不能用;
汤旺河边 错在: rcl al,1 ;把进位标志移入AL.
MOVSB
的英文是
move
string
byte,意思是搬移一个字节,它是把
DS:SI
所指位址的一个位元组搬移到
ES:DI
所指的位址上,搬移后原来的内容不变,但是原来
ES:DI
所指的内容会被覆盖而且在搬移之后
SI
和
DI
会自动地址向下一个要搬移的位址。
一般而言,通常程序设计师只搬一个字节,通常都会重复很多次,如果要重复的话,就得把重复次数先存储在
CX
寄存器,并在
MOVSB
之前加上
REP
指令。
宏和子程序都是为了简化源程序的编写,提高程序的可维护性,但是它们二者之间存在着以下本质的区别:
1、在源程序中,通过书写宏名来引用宏,而子程序是通过CALL指令来调用;
2、汇编程序对宏通过宏扩展来加入其定义体,宏引用多少次,就相应扩展多少次,所以,引用宏不会缩短目标程序;而子程序代码在目标程序中只出现一次,调用子程序是执行同一程序段,因此,目标程序也得到相应的简化;
3、宏引用时,参数是通过“实参”替换“形参”的方式来实现传递的,参数形式灵活多样,而子程序调用时,参数是通过寄存器、堆栈或约定存储单元进行传递的;
4、宏引用语句扩展后,目标程序中就不再有宏引用语句,运行时,不会有额外的时间开销,而子程序的调用在目标程序中仍存在,子程序的调用和返回均需要时间。
mov
bx,offset
data
mov
al,0
mov
cx,100
next:
mov
[bx],al
inc
bx
loop
next
后面的自己动手解决吧!
偷懒可是不好的行为,很少有高手愿意来做这种没有技术含量的书本知识了。
再说全是书上的概念,有必要发出来么。
自己翻翻书不就完了。迎难而上,方显男儿本色。
DATAS SEGMENT
STR1 DB 'The first number a is(eight byte):$'
STR2 DB 'The second number b is(eight byte):$'
STR3 DB 'The answer of the a+b=$'
D1 DB 02FH,03FH,04FH,02FH,02FH,02FH,0FH,0H ;预设要相加的两个八字节数,可任意设置
D2 DB 0H,0F2H,0F2H,0F2H,0F4H,0F4H,0F4H,0H
D3 DB 100 DUP(0)
DATAS ENDS
STACK SEGMENT STACK 'STACK'
DB 100 DUP(?)
STACK ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACK
MAIN PROC FAR
START:
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATAS
MOV DS,AX
MOV DX,OFFSET STR1 ;输出第一个八字节数
MOV AH,9
INT 21H
LEA DI,D1 ;因为D1中低位在前,高位在后,所以输出D1要倒着输出
ADD DI,7
MOV CX,8
CALL XS
MOV DX,0AH ;回车换行
MOV AH,2
INT 21H
MOV DX,0DH
MOV AH,2
INT 21H
MOV DX,OFFSET STR2 ;同理,输出D2
MOV AH,9
INT 21H
LEA DI,D2
ADD DI,7
MOV CX,8
CALL XS
MOV DX,0AH ;回车换行
MOV AH,2
INT 21H
MOV DX,0DH
MOV AH,2
INT 21H
MOV DX,OFFSET STR3
MOV AH,9
INT 21H
MOV SI,OFFSET D1 ;调用XJ子程序作八字结数相加
MOV DI,OFFSET D2
MOV BX,OFFSET D3
MOV CX,4
CALL XJ
JNC L1
MOV [BX],1 ;CF=1,最高位置1
L1:LEA DI,D3
ADD DI,8
MOV CX,9
CALL XS ;输出相加的结果
RET
MAIN ENDP
MOV DL, 0DH
MOV AH, 2H
INT 21H
MOV DL, 0AH
MOV AH, 02H
INT 21H
XJ PROC
CLC
AA:MOV AX,[SI] ;用循环实现八字节相加,两字节两字节进行
ADC AX,[DI]
MOV [BX],AX
PUSHF
ADD SI,2
ADD DI,2
ADD BX,2
POPF
LOOP AA
RET
XJ ENDP
XS PROC
LP2:MOV AL,[DI]
MOV BL,AL
PUSH CX
MOV CL,4
SHR AL,CL ;右移4位
CALL PP ;第一次调用输出每个字节的高4位
MOV AL,BL
CALL PP ;第二次调用输出每个字节的低4位
POP CX
DEC DI
LOOP LP2 ;循环分别输出结果的9个字节
RET
XS ENDP
PP PROC
AND AL,0FH ;取AL中的低4位
CMP AL,10 ;比较低4位与10的大小
JB S ;小于,则直接输出低4位
ADD AL,7 ;否则加7后再输出
S:ADD AL,30H
MOV DL,AL
MOV AH,2
INT 21H
RET
PP ENDP
MOV AH,4CH
INT 21H
CODES ENDS
END START
希望能够帮到你!(*^__^*) 嘻嘻……
; 本程序在MASMPlus 1.2集成环境下通过编译,经过调试,运行正确。虽不敢说万无一失,但自信无虞;请楼主严格测试,若还有误,本回答作废。
; 题目名称:键盘输入两个10位数以内(位数可变)十六进制数,求和并显示输出
; 题目来源:http://zhidao.baidu.com/question/129269410.html
; 操作说明:输入两个10位数以内(位数可变)十六进制数时,输足10位,自动结束输入;不足10位,按回车键结束输入。
Code Segment
Assume CS:Code,DS:Code
CR equ 000DH
LF equ 000AH
KBBack equ 0008H
; -------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -------------------------------------
; 功能:在当前光标位置显示一个字符
; 入口:dl=要显示的字符
Output_Chr proc Near
push ax
mov ah,02h
int 21h
pop ax
ret
Output_Chr Endp
; -------------------------------------
; 功能:显示、输出一个回车、换行
Output_CTLF proc Near
push ax
push dx
mov ah,02h
mov dl,0dh
int 21h
mov dl,0ah
int 21h
pop dx
pop ax
ret
Output_CTLF Endp
; -------------------------------------
; 功能:取光标位置
; 入口:无
; 出口:DH=行号,DL=列号
GetCursor Proc Near
PUSH DS
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH CS
POP DS
XOR BX,BX
MOV AH,3
INT 10H
MOV Cursor_Row,DH
MOV Cursor_Col,DL
POP DX
POP CX
POP BX
POP AX
POP DS
RET
Cursor_Row DB ?
Cursor_Col DB ?
GetCursor EndP
; -------------------------------------
; 功能:置光标位置
; 入口:Cursor_Row=行坐标; Cursor_Col: 列坐标)
SetCursor Proc Near
PUSH DS
PUSH DX
PUSH CX
PUSH BX
PUSH AX
PUSH CS
POP DS
MOV DH,Cursor_Row
MOV DL,Cursor_Col
XOR BX,BX
MOV AH,2
INT 10H
POP AX
POP BX
POP CX
POP DX
POP DS
RET
SetCursor EndP
; -------------------------------------
; 功能:键盘输入一个指定位数(N)的十六进制数字,保存在指定的存储单元
; 输足N位的,自动结束输入;不足N位的,回车结束输入。
; 入口:@@Hexadec=数字位数,ds:di=输入数据保存地址
; 出口:保存在指定的存储单元
Input_Hex Proc Near
push es
push di
push cx
push ax
push ds
pop es
mov cx,cs:@@Hexadec ;十六进制数位数
cld
push cx
xor al,al
rep stosb ;数据缓冲区清零
pop cx
dec di
@@Input_Hex: call GetCursor ;取光标位置
mov ah,1 ;从键盘接受一个字符
int 21h
cmp al,CR ;回车?已经键入的十六进制字符不足N位
jz @@Return_Hex
cmp al,KBBack ;回空键?
jz @@KB_Back ;是,重新输入
cmp al,'0' ;低于数字'0'?
jb @@KBBack ;是,重新输入
cmp al,'9';低于或等于数字'9'?
jbe @@Convert_Bin ;是,转去转换成二进制数
and al,0dfh ;对高于数字'9'的字符视为字母并转换成大写,以便判断是否是A~F之间的字母
cmp al,'A' ;低于字母'A'?
jb @@KBBack ;是,重新输入
cmp al,'F' ;高于字母'F'?
ja @@KBBack ;高于字母'F',重新输入
sub al,7 ;使低4位等于对应字母的十六进制值
@@Convert_Bin: and al,0fh ;转换成二进制数
push ax ;入栈保存
loop @@Input_Hex ;接受下一个数字
@@Return_Hex: mov ax,cx
mov cx,cs:@@Hexadec
sub cx,ax
jcxz @@Return_pop
std
@Reverse_Order:pop ax
stosb ;保存
loop @Reverse_Order
@@Return_pop: pop ax
pop cx
pop di
pop es
ret
@@KB_Back: cmp cx,cs:@@Hexadec ;十六进制数位数
jz @@Input_Hex
inc cx
dec di
dec Cursor_Col
@@KBBack: call SetCursor ;置光标位置
jmp @@Input_Hex
@@Hexadec dw ? ;数字位数
Input_Hex EndP
; -------------------------------------
; 功能:将AL中的低4位二进制数转换成十六进制显示的ASCII码
; 入口:AL
; 出口:AL=转换后的ASCII码
AL_ASCII Proc Near
cmp al,10 ;AL<10?
jb @@To_ASCII ;AL<10,按数字处理
add al,7 ;AL>=10,按大写字母处理
@@To_ASCII: add al,'0' ;转换成相应的数字或大写字母
ret
AL_ASCII EndP
; -------------------------------------
; 功能:键盘输入一个字符,若输入的是'y'或'n'(不分大小写),则显示并返回
; 入口:无
; 出口:若输入的是'y',进位标志置位;若输入的是'n',进位标志复位。
Yes_or_No proc Near
push dx
push ax
@@Input_Chr: mov ah,7 ;不带回显的键盘输入
int 21h
mov dl,al
and al,0dfh
cmp al,'Y'
jnz $+5
stc
jmp $+7
cmp al,'N'
jnz @@Input_Chr
clc
mov ah,2
int 21h
pop ax
pop dx
ret
Yes_or_No Endp
; -------------------------------------
N equ 10 ;数据位数
Summand db N dup(?) ;被加数
Addend db N dup(?) ;加数
Sum db N+1 dup(?) ;和
Prompt_Str1 db 'Please input the summand:$' ;“输入被加数”提示信息
Prompt_Str2 db 13,10,'Please input the addend:$' ;“输入加数”提示信息
Prompt_Str3 db 13,10,'The sum:$' ;“显示相加之和”提示信息
Prompt_Str4 db 13,10,13,10,'Do you want to continue(y/n)?$' ;“继续做加法?”提示信息
Press_Key db 7,13,10,13,10,'The complated. Press any key to exit...$'
; -------------------------------------
Start: push cs
pop ds
push cs
pop es
mov @@Hexadec,10 ;数字位数
Addition_Hex: lea di,Sum ;相加和存放地址
mov cx,N+1
xor al,al
cld
rep stosb ;相加之和初始值清零
Output Prompt_Str1 ;提示输入被加数
lea di,Summand ;被加数存放地址
call Input_Hex ;键盘输入一个指定位数(N)的十六进制数字,保存在指定的存储单元
Output Prompt_Str2 ;提示输入加数
lea di,Addend ;加数存放地址
call Input_Hex
mov si,9 ;个位数下标
lea di,Sum[10] ;相加之和个位数存放地址
mov cx,10 ;数据位数
std
clc ;进位标志位复位
Addition: mov al,Summand[si] ;读入一位被加数
adc al,Addend[si] ;加上加数
push cx
xor ah,ah
mov cx,4
shl ax,cl ;左移4位,把进位标志位移到AH
shr al,cl ;右移4位,把AL的低4位移回
pop cx
stosb ;保存相加结果
rcr ah,1 ;带进位循环右移1位,把进位结果移至标志位
dec si
loop Addition
mov al,ah
rcl al,1 ;把进位标志移入AL
test al,al
jz $+3
stosb ;保存最高位进位
Output Prompt_Str3 ;提示显示相加和
mov cx,N+1
lea di,Sum ;相加和存放地址
xor al,al
cld
repz scasb ;扫描相加和最高有效位
dec di
inc cx
mov si,di ;相加和最高有效位地址
@@Output_Data: lodsb ;读入1位相加和结果
call AL_ASCII ;将AL中的低4位二进制数转换成十六进制显示的ASCII码
mov dl,al
call Output_Chr ;显示一个字符
loop @@Output_Data
Output Prompt_Str4 ;提示是否继续做十六进制加法
call Yes_or_No ;键盘输入一个字符,若输入的是'y'或'n'(不分大小写),则显示并返回
call Output_CTLF ;显示、输出一个回车、换行
call Output_CTLF
jc Addition_Hex
; -------------------------------------
Exit_Proc: Output Press_Key ;提示操作完成,按任意键结束程序
mov ah,1
int 21h
mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束
求汇编语言程序设计高手,几道题,感激不尽!!
多项选择题
1、汇编语言中,B C 可以作为有效的名字,如标号、变量名等。
A、0fffh
B、var00
C、loop1
D、test
E、add
2、使用MASM 6.x版本的“ML /Fl lt401.asm”命令,如果源程序lt401.asm没有语法错误,则将生成 A B C 文件。
A、目标代码文件
B、可执行文件
C、列表文件
D、调试文件
E、库文件
3、汇编语言中,程序员不能将 A B D E 作为用户标识符。
A、DS
B、byte
C、again
D、test
E、SS
4、在汇编语言程序定义常量max等于100,正确的表达是 A B 。
A、max = 100
B、max equ 100
C、max db 100
D、max dw 100
E、max org 100
5、真值18,在汇编语言程序用db定义变量初值,正确的表达是 B C D E。
A、18h
B、18
C、12h
D、00010010b
E、12H
6、用JZ实现AX最高位等于0转移,前面可以使用 A C 指令产生条件。
A、test ax,80h
B、shl ax,1
C、and ax,80h
D、test ax,0
E、cmp ax,80h
7、过程定义伪指令定义的过程名可能具有 D E 属性。
A、BYTE
B、WORD
C、DWORD
D、FAR
E、NEAR
8、例题4.7循环结构的程序中,从标号again到jmp again之间的程序段包含了_______部分。
A、循环初始
B、循环体
C、循环控制
D、多重循环
E、循环次数设置
晕,谁知道例题是什么,不过标号到跳转语句之间,应该就是循环体部分,一定是包含了 B C ,不知道有没有 D 。
9、用JZ实现AX=0转移,前面可以使用 A B C 指令产生条件。
A、sub ax,0
B、add ax,0
C、cmp ax ,0
D、test ax,0
E、and ax,0
10、循环结构的程序通常包括 A C D 部分。
A、设置循环初值
B、调用循环
C、循环体
D、循环控制
E、循环返回
(汇编语言程序设计〉半期试题请求解答
2012年〈汇编语言程序设计〉半期试题(堂下开卷)
一.名词解释(本大题共5小题,每小题3分,共15分)试解释下列名词的含义。
1. 逻辑地址:在CPU内部的存储单元地址表示形式,分为段基值和偏移量两个组成部分,
它们都是16位的,在指令或源程序中只能使用逻辑地址来表达存储单元。
2. 物理地址:CPU访问存储单元时向地址总线传送的地址表示形式,是20位的地址,由
逻辑地址中段基值乘以16再加上偏移量得到,逻辑地址到物理地址的转换由CPU在执行访问存储单元的指令时自动完成。
3. 标志寄存器:在CPU中由状态标志位与控制标志位组成的寄存器称为标志寄存器,其
中状态标志位用于标识运算指令执行后运算结果的特征,控制标志位用于控制CPU的工作模式或改变CPU对某些事件的响应方式。
4. 存储器寻址方式:即获得存储单元地址的方式,在8086/8088CPU中包括直接寻址、寄
存器间接寻址、基址寻址、变址寻址、基址变址寻址这五种寻址方式。
5. 补码:CPU内部用于表示带符号数的一种编码,正数的补码为真值本身,负数的补码为
真值变反加1的结果。
二.计算题(本大题共5小题,每小题4分,共20分)试按照各小题的要求给出计算结果。
1. 将十进制数100分别转换为二进制、十六进制数,它们的表示形式分别为多少? 答:100的十六进制表示为64H,二进制表示为01100100B。 2. 假设(DS)=0B00H,(BX)=0210H,对于指令MOV DS:120H[BX],AL,其目的
操作数的物理地址为多少?
答:EA=(BX)+120H = 0210H+0120H = 0330H,物理地址 = (DS)*16+EA = 0B000H+0330H=0B330H。 3. 假设(BX)=0210H,(DI)=0060H,对于指令ADD DL,[BX][DI],其源操作数的偏
移量为多少?
答:源操作数EA = (BX)+(DI)= 0210H+0060H =0270H。 4. 假设当前(SP)=0060H,连续执行5条PUSH指令后,(SP)=? 答:(SP)=0060H – 5*2 = 0060H – 000AH = 0056H
5. 对于一个十进制数 – 65,其二进制补码表示形式为多少?
答:先将数值转换为二进制表示: - 65 = - 41H = - 01000001B ,由于是负数,变反加1得到补码形式:10111110B +00000001B = 10111111B
三.排错题(本大题共4小题,每小题5分,共20分)每小题列出了一条指令,判断该指
令有无语法错误,如果存在语法错误,请指出具体的错误原因,判断正确给2分,分析正确给3分,判断错误不给分。
1. PUSH 5588H
答:错误,单操作数指令不能使用立即数寻址方式。 2. MOV DS, 1720H
答:错误,MOV指令不能将立即数直接传送至段寄存器,需要通用寄存器作为中转。 3. ADD AX, CL
答:错误,两个操作数的类型不匹配,AX为16位,CL为8位。 4. AND AX,[DX]
答:错误,DX寄存器不能用作存储器寻址方式中的基址或变址分量。
四.程序分析题(本大题共6小题,每小题5分,共30分)每小题列出了一段小的程序片
段和相关存储单元的初始值,请按题目的要求分析各程序片段的运行结果。(寄存器中的内容请使用十六进制形式给出)
1. 阅读如下程序片段
MOV AL,4CH MOV BL,0B5H ADD AL,BL
执行上述程序片段后,(AL)= 01H (1分),(BL)= 0B5H (1分), CF= 1 (1分),OF= 0 (1分),PF= 0 (1分)
2. 阅读如下程序片段
MOV AL,0F3H MOV DL,0C4H ADD AL,DL AND AL,0FH
执行上述程序片段后,(AL)= 07H (1分),(AF)= 不确定 (1分), CF= 0 (1分),OF= 0 (1分),PF= 0 (1分)
3. 阅读如下程序片段
MOV AL,7EH MOV CL,04H ROL AL,CL
执行上述程序片段后,(AL)= 0E7H (2分),(CL)= 04H (1分), CF= 1 (1分),OF= 不确定 (1分)
4. 阅读如下程序片段
MOV AX,0632H MOV BX,0C202H SUB AX,BX INC AX
执行上述程序片段后,(AX)= 4431H (2分),(CF)= 1 (2分), OF= 0 (1分)
5. 阅读如下程序片段,假设(DS)=0100H,字节单元(01024H)=56H,字节单元(01025H)
=28H
MOV BX,0024H LEA BX,[BX] OR BX,0 ADC BX,[BX]
执行上述程序片段后,(BX)= 287AH (3分),(CF)= 0 (2分), OF= 0 (1分)
6. 阅读如下程序片段,假设(SP)=0064H
MOV AX,0001H MOV BX,0002H PUSH AX PUSH BX POP CX POP BX
执行上述程序片段后,(AX)= 0001H (2分),(BX)= 0001H (2分), (SP)= 0064H (1分)
五.程序设计题(本大题共2小题,第一小题7分,第二小题8分,共15分)
1. 试编写一程序片段,实现BL高4位与低4位相互交换(7分) 答:
mov cl, 4 rol bl, cl
2. 试编写一程序片段,不使用乘除法指令,实现((AX)*5+14)/ 2的功能(AX中的数
据理解为补码)(8分) 答:
mov bx, ax mov cl, 2 sal ax, cl add ax, bx add ax, 14 sar ax, 1
谁有汇编语言的试题???
一、填空题
1.ZF标志位是标志结果是否为零的,若结果,ZF为( ),否则ZF为()。当ZF为1时,SF为( )
2.标号可以有两种类型属性。它们是( )和( )
3.8位无符号整数的表示范围为0--255,写成16进制形式为(
),8位有符号整数的表示范围为-128--+127,写成16进制形式为( )
4.伪指令DB,GROUP 和NAME 三个标号名字域必须有名字的是( ),不得有名字的是(
),可有可无名字的是( )。
5.循环程序通常由( )( )( )和循环结果外理四部分构成
6.在数值不达式中,各种运算符可可混合使用,其优先次序规则*,/( )于+,-;XOR,OR()于AND,LT( )于GT
7. 宏指令定义必须由伪指令( )开始,伪指令( )结束,两者之间的语句称为( )
8.调用程序与子程序之间的参数传递方法有四种,即堆栈法( )( )( )
9.分别用一条语句实现下述指明的功能
(1)栈顶内容弹出送字变量AYW( )
(2)双字变量AYD存放的地址指针送ES和SI( )
(3)变量AY2类型属性送AH( )
(4)不允许中断即关中断( )
(5)将字符串‘HOW ARE YOU!’存入变量AYB( )
(6)子程序返回调用程序( )
(7)地址表达式AYY[4]的偏移地址送字变量ADDR( )
(8)AX的内容加1,要求不影响CF( )
(9)BX的内容加1,要求影响所有标志位( )
(10)若操作结果为零转向短号GOON( )
二、单选题
1.IBM PC微机中,有符号数是用( )表示的
1.原码 2.补码 3.反码 4.BCD码
2.把汇编源程序变成代码程序的过程是( )
1.编译 2.汇编 3.编辑 4.链接
三、己知:VAR1,VAR2的类型属性分别为字和字节,标号LPFAR的类型属性为FAR。指出下列非法语句的错误原因
1.POP CS( )
2.INC [BX] ( )
3.MVL 8( )
4.JLE LPFAR( )
5.MOV DB,1800( )
6.MOV[DI],VAR1
7.SUB AX,VAR2( )
8.CMP SS AX( )
四、简答题
1.试述子程序的一般结构组成
2.标号有哪三个属性?其含义是什么?
3.试述CMP AX,BX和SUB AX,BX两条语句的异同点?
五、阅读如下程序段,回答所提出的问题,假定X1,X2,...XN为无符号数。
ORG 100H
BLOK DW X1,X2,...,XN
COUNT EQU ($-BLOK)/2
RESULT DW COUNT,?
...
LEA BX,BLOK-2
MOV CX,RESULT
XOR AX,AX
GOON:ADD BX,2
CMP AX,[BX]
JAE NEXT
MOV AX,[BX]
NEXT:LOOP GOON
MOV RESULT+2,AX
程序段执行完,回答下述问题
RESULT+2字存储单元的内容=( )
BX=( )
程序循环次数=( )
六、在下述程序段的每一空框内填入一个语句(不得修改其它语句),以实现如下功能:字节变量STR中存放着一个字符串,以0DH为结束标志,试求串长度并送字变量COUNT中。
LEA SI,STR
( )
XOR CX,CX
GOON: CMP AL,[SI]
( )
INC CX
( )
JMP GOON
NEXT:MOV COUNT,CX
七、编制将DS段中名为BUFB的字节存储区改写为空白字符(编码为20H)的程序段。假定BUFB存储区定义为BUFB
DB N DUP('^'),其中N为字面常量。
八、己知宏指令为:
SHIFT MACRO RR,COUNT
MOV AX,COUNT
IF RR LE 64
MOV CL,3
SHR AX,CL
IF RR LT 16
MOV CL,6
SHR AX,CL
ENDIF
ENDIF
ENDM
宏调用为:SHIFT 15,7FFFH
SHIFT 80,9FFFH
写出宏扩展后的等效源程序段。
九、编写完整程序,功能是把N个8个二进制数据转换成16进制字符数据。假定N个数据存放在字节变量VARB中,转换后的字符数据存放在HVARB中,提示0--9的字符码为30H--39H,A--F的字符码为41H--46H
答案:
一、填空题
(1)1,0,0
(2)NEAR或近程,FAR或远程
(3)0--FFH,80H--7FH
4)GROUP,NAME,DB
(5)循环准备,循环体,循环的控制与修改
6)高,低,等 (
7)MACRO,ENOM,宏体
(8)约定寄存器法,约定存储单元法,向量传递法 (9)(POP
AYW)(LES SI,AYD)(MOV AH,TYPE AY2)(CLI)(AYB DB“HOW
ARE YOU!”)(RET)(MOV ADDR,OFFSET AYY[4])(INC
AX)(ADD BX,1)(JZ GOON)
二、选择题 2,2
三、 1.CS不能作目的操作数 2.[BX]=义性 3.乘法指令源操作数不能是立即数 4.远程标号不能作为条件转移指令的操作数 5.立即数不能直接送段寄存器 6.两个操作数不能同时为存储器操作数 7.操作数不配,AX为字,VAR2为字节 8.段寄存器不能作为运算指令的操作数
四、简答题 1.由保存现场,取入口参数,加工处理,进也口友数,恢复现场和返回程序 2.段属性指定义该标号的段地址 偏移属性:指该标号的偏移地址 类型属性:指标号是在定义它的段内引用还是在其它段引用 3.相同点:都执行AX-BX操作,影响所有标志位且对档志位的影响相同 不同点:CMP执行后AX,BX
内容不改变,而SUB执行后,AX内为AX-BX之差,即内容变化了
五、MAX(X1,X2,。。。XN) (COUNT-1)
六、(MOV AL,ODH)(JE NEXT或JZ NEXT)(INC SI)
七、 MOV AX,SEG BUFB MOV DS,AX LEA SI BUFB MOV
CX,N GOON:MOV BYTE PTR[SI],20H INC SI LOOP
GOON
八、 MOV AX,7FFFH MOV CL,3 SHR AX,CL MOV
CL,6 SHR AX,CL MOV AX,9FFFH
九、 DATA SEGMENT VARB DB
45,36,377Q,。。。,11011011B N EQU $-VARB HVARB DB 2
NDRP(?) DATA ENDS STACK SEGMENT PARA STACK
“STACK” DB 256 DUP(?) STACK ENDS CODE
SEGMENT ASSUME CS:COOE,DS:DATA,SS:STACK MAIN
PROC FAR PUSH DS SUB AX,AX PUSH AX MOV
AX,DATA MOV DS,AX MOV DX,N LEA DI,HVARB LEA
SI,VARB,置初值 GOCN:MOV AH,[SI] MOV AL,AH AND
AH,0F0H MOV CL,4 SHR AH,CL CMP AH,9 JNA
NEXT1 ADD AH,7 NEXT1:ADD AH,30H,AH AND
AL,DFH CMP AL,9 JNA NEXT2 ADD AL,7 NEXT2:ADD
AL,30H,AL MOV [DI],AH MOV [DI],AL ADD DI,2 INC
SI DEC DX JNZ GOON RET MAIN ENDP CODE
ENDS END MAIN
另外,站长团上有产品团购,便宜有保证
一、 选择题
1. 有一个翻译程序,它能把汇编语言编写的源程序翻译成CPU能识别的机器语言,这个编译程序被称为(汇编)程序。
2. 字符‘A’的ASCII码值为(41H)。
3. MOV AX[BP]指令隐含的段是(SS)。
4. (ADD AX,1234H)的指令是立即寻址方式。
5. 指令STC是将进位位(置1)。
6. AX=5A5AH,BX=FFFFH,执行XOR AX,BX指令后,AX=(A5A5H)。
7. AX=100H,DX=123H,执行MUL DX指令后, DX=(1)。
8. AX=100H,DX=123H,执行SUB AX,DX指令后,进位位=(1)。
9. BX=100H,CX=1202H,执行SHL BX, CL指令后,BX=(400H)。
10已知(AH)=12H,(BL)=0A9H,执行ADC AH,BL后,AH=(BBH或BCH)。
二、 填空题。
1.. 有多种指令使得DX=0,写出2种(MOV DX,0),(SUB DX,DX),(XOR DX,DX),(AND DX,0)。
2. JNE指令的功能是(两个数不相等时,跳转)。
3. 在子程序参数传递中,用RET 2指令的作用是(返回时弹出地址后再弹出2个字节)。
4. IN AL,60H的功能是(从端口 60H读入一个字节到AL中)。
5. ASCII码(0D,0A)输给打印机,则打印机执行(回车),(换行)。
三、简答题。
1. 子程序返回DOS的程序(写出至少一种程序,仅要求写出关键指令)。
1:
mov ax,data
Mov ds,ax
……
Mov ah,4ch
Int 21h
2:
push ds
xor ax,ax
push ax
……
ret
2. 列出可用于操作和运算的7个寄存器。
可用:Ax,bx,cx,dx,si,di,bp
不可用:ds,cs,es,ip,ss,sp
3. 为什么运行速度是关键时用宏,而存储空间的关键时用子程序。
宏调用是在源程序被汇编时由汇编程序处理,而子程序调用是在程序执行期间由CPU直接执行。子程序调用时会比宏调用后的代码多执行CALL指令和RET指令;以及需要附加的指令进行参数传递,因而执行速度稍慢。所以运行速度是关键时用宏。由于每一次宏调用都要宏展开,把宏体中的内容复制一遍,因而用宏汇编编写的程序在目标代码中会重复出现相同或相似的程序段,占用的内存空间大;而子程序是由CALL指令调用,无论调用多少次,子程序目标代码只在最终的执行程序中出现一次,目标代码相对较短。所以存储空间的关键时用子程序。
4. 简述:子程序参数传递的3种方法。
1.用寄存器传递参数
2.用内存变量传递参数
3.用堆栈传递参数
C语言的子函数一般用堆栈传递参数
四、设计操作题。
编一个子程序,将一个0~F的数值(设存在AL中,A~F为大写),转换成供显示的ASCII值(返回参数由AL传递)。要求有过程定义,设子程序名为ZH。
ZH PROC NEAR
CMP AL,9
JA A1
ADD AL,30H
A1:ADD AL,37H
ENDP
五、计算题。
编程序,计算1~11的奇数累加和。要求用变量或数组,具有所有段、过程,以及主程序、子程序,返回DOS功能。要求:用宏汇编编程,程序完整。(若程序较长,请写成两列)。
Data segment aa db 1,3,5,7,9,11,24h strg db '00$' data ends stack segment stack Db 200 dup(0) Stack ends Code segment Assume cs:code, ds:data, ss:stack A1 proc far Start: mov ax,data Mov ds,ax Mov ax,0 Mov si,0 Mov cx,6 call A2 mov ah,al shr ah,1 shr ah,1 shr ah,1 shr ah,1 and al,0fh add al,30h add ah,30h mov strg[0],ah mov strg[1],al mov dx,offset strg mov ah,9h int 21h Mov ah,4ch Int 21h A1 endp A2 proc near Loop1: Add Al,aa[si] Inc si Loop loop1 ret A2 endp Code ends End start
DATA SEGMENT
B DB '00$'
DATA ENDS
SSEG SEGMENT PARA STACK'STACK'
DB 80H DUP(?)
SSEG ENDS
CODE SEGMENT
ASSUME ds:DATA,SS:SSEG,cs:CODE
A1 PROC FAR
START: MOV AX,DATA
MOV DS,AX
CALL L1
MOV AH,AL
MOV CL,4
SHR AH,CL
AND AL,0FH
ADD AH,30H
ADD AL,30H
MOV B[0],AH
MOV B[1],AL
mov dX,offset B
mov ah,9h
int 21h
MOV AH,4CH
INT 21H
A1 ENDP
L1 PROC NEAR
MOV AL,0
MOV BL,1
MOV CL,6
LOOP1: ADD AL,BL
ADD BL,2
LOOP LOOP1
RET
L1 ENDP
CODE ENDS
END STARt
汇编语言程序设计题目,在线等答案!!!急!
;------------------------------------------------------------
14.假设变量A存放字节数据是39H, 变量B存放字节数据是36H,试编写程序实现将两个数组合后成为96 H,存放变量C中.
;------------------------------------------------------------
MOV AL, A ;取来A
AND AL, 00001111B
MOV CL, 4
SHR AL, CL ;左移4位.
MOV CL, AL
MOV AL, B ;取来B
AND AL, 00001111B
ADD AL, CL ;合成.
MOV C, AL ;保存.
END
;------------------------------------------------------------
15.比较两个变量A和B的大小,在屏幕上显示比较结果.(A>B、A<b )
;------------------------------------------------------------
DATA SEGMENT
A DB 39H ;在这里写入:0~255
B DB 36H ;在这里写入:0~255
MSG1 DB 13, 10, 'A >= B $'
MSG2 DB 13, 10, 'A < B $'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV AL, A ;取来A
SUB AL, B ;减去B
JB FU ;不够减转移.
LEA DX, MSG1 ;够减就显示A>=B
JMP DISP
FU:
LEA DX, MSG2
DISP:
MOV AH, 9 ;显示字符串.
INT 21H
MOV AH, 4CH
INT 21H
CODE ENDS
END START
;------------------------------------------------------------
其它题目,也回答了不少,可见楼主提问的其它网页。
<b )
汇编语言程序设计习题
<b )
1.写出下列程序段执行的结果,(AL)=? (DL)=?
并指出此程序段完成的是什么功能?
MOV CL, 4
MOV AL, 87d=57H
MOV DL, AL
AND AL, 0FH
OR AL, 30H
SHR DL, CL
OR DL, 30H
(AL)=37H (DL)=35H
程序段完成功能是:把AL中的16进制数高位送DL,移位取出低位,
再分别转化为对应的ASCII码.
2.假定DS=2100H,BX=0100H,SI=0002H;
[21100H]=12H,[21101H]=34H,[21102H]=56H,[21103H]=78H。
2100:100H=12H,34H,56H,78H
分析下列指令执行后寄存器的内容。
(1) MOV AX,[101H] ;ax=5634H
(2) MOV AX,[BX+2] ;ax=[0102H]=7856H
(3) MOV AL,[BX][SI+1] ;al=[0103H]=78H
(4) MOV AX,100H[SI] ;ax=[0102H]=7856H
3.识别下列指令正确与否,对错误指令,说明出错的原因。
(1) MOV DS,100 × ;数据段不允许用立即数赋值
(2) MOV [1000H],23H ×;立即数送入内存需指明是字还是字节
(3) MOV [1000H],[2000H] ×;源和目标不能同为内存数
(4) MOV DATA,1133H ? ;如用DATA定义过数据段,DATA就不能再用作变量名
(5) MOV 1020H,DX ×;目标不能是立即数
(6) MOV AX,[0100H+BX+BP] ×;寻址时,BX、BP只能用一个
(7) MOV CS,AX ×;CS不能直接赋值
(8) PUSH AL ×;堆栈不能压入字节,只能压入字(32位压入双字)
(9) PUSH WORD PTR[SI] √
(10) IN AL,378H ×;端口寻址大于0FFH,端口号源要放入DX
(11) OUT 80H,AX √
(12) MOV CX,[AX+SI]×;AX不能用于内存寻址