2个汇编语言问题,求解
1、在M数据段DATA单元开始存放2个8位无符号数,比较大小,并将大的传送到MAX单元2、已知AL中有一8位二进制数,测试其中的D2位,如果为1则转移到EXIT...
1、在M数据段DATA单元开始存放2个8位无符号数,比较大小,并将大的传送到MAX单元
2、已知AL中有一8位二进制数,测试其中的D2位,如果为1则转移到EXIT 展开
2、已知AL中有一8位二进制数,测试其中的D2位,如果为1则转移到EXIT 展开
6个回答
展开全部
1、已知AX=0FF60H,CF=1
MOV DX,96
XOR DH,0FFH
SBB AX,DX
执行上述指令序列后,AX=_ffffh,CF=__1
2、设寄存器AL,BL,CL中内容均为76H,
XOR AL,0FH
AND BL,0FH
OR CL,0FH
执行上述指令序列后,AL=__79h
BL=______06h_____,CL=_____7fh_____
3、已知AX=0A33AH,DX=0F0F0H
AND AH,DL ah=a0h
XOR AL,DH al=cah
NEG AH
NOT AL
执行上述指令序列后,AH=___60h___,AL=____35h____
4、DATA SEGMENT
S9 DB0,1,2,3,4,5,6,7,8,9
DATA ENDS
┇
LEA SI,S9
LEA,DI,S9+1
MOV CX,5
LOP: MOV AL,[SI]
XCHG AL,[DI]
MOV [SI],AL
ADD SI,2
ADD DI,2
LOOP LOP
上述程序段运行后,S9开始的10个字节存储单元内容是什么?
S9 DB 1,0,3,2,5,4,7,6,9,8
5、MOV AL,38H
MOV BL,49H
CALL SUBO
INC AL
DEC CL
┇
SUBO PROC
ADD AL,BL
MOV CL,AL
DAA
RET
SUBO ENDP
上述程序段运行后,AL=______88h___,CL=____80h___
6、DA3 EQU WORD PTR DA4
DA4 DB 0ABH,89H
┇
SHR DA3,1
MOV DX,DA3
SHL DA4,1
MOV CX,DA3
上述程序段运行后,CX=___10ccH______,DX=_____1066H___
四、程序填空题(注意:下列各小题中,每空只能填一条指令!每小题6分,共12分)
1、下面程序段是判断寄存器AH和AL中第3位是相同,如相同,AH置0,否则AH置全1。试把空白处填上适当指令。
xor ah,al_____
AND AH,08H
jnz zero_____
MOV AH,OFFH
JMP NEXT
ZERO:MOV AH,0
NEXT:……
2、以BUF为首址的字节单元中,存放了COUNT个无符号数,下面程序段是找出其中最大数并送入MAX单元中。
BUF DB 5,6,7,58H,62,45H,127,……
COUNT EQU $-BUF
MAX DB?
┇
MON BX,OFFSET BUF
MOV CX,COUNT-1
MOV AL,[BX]
LOP1:INC BX
cmp al,[bx]____
JAE NEXT
MOV AL,[BX]
NEXT:DEC CX
jz lop1____
MOV MAX,AL
五、编制程序题(第1小题6分,第2小题14分,共20分)
1、编定程序段,用DOS的1号功能调用通过键盘输入一字符,并判断输入的字符。如字符是"Y",则转向YES程序段;如字符是"N",则
转向NO程序段;如是其他字符,则转向DOS功能调用,重新输入字符。(考生勿需写出源程序格式,只需写出与试题要求有关的指令序
列)
(YES和NO分别是两程序段入口处的标号)
CODE SEGMENT
ASSUME CS:CODE
BEGIN:
MOV AH,01h
INT 21H
CMP AL,'Y'
JZ YES
CMP AL,'N'
JZ NO
JMP BEGIN
YES:..
...
...
NO:...
...
...
MOV AH,4CH
INT 21H
CODE ENDS
END BEGIN
2、在BUF1和BUF2两个数据区中,各定义有10个带符号字数据,试编制一完整的源程序,求它们对应项的绝对值之和,并将和数存入以
SUM为首址的数据区中。
DATA SEGMENT
BUF1 DW-56,24,54,-1,89,-8……
BUF2 DW45,-23,124,345,-265,……
SUM DW10DUP(0)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
BEGIN:
MOV AX,DATA
MOV ES,AX
MOV DS,AX
LEA SI,BUF1
MOV BX, OFFSET BUF2
LEA DI,SUM
MOV CX,10
L1:
MOV AX,[SI]
ROL AX,1
JC L2
ROR AX,1
L4:
MOV DX,AX
MOV AX,[BX]
ROL AX,1
JC L3
ROR AX,1
L5:
ADD AX,DX
MOV [DI],AX
INC BX
INC BX
INC SI
INC SI
INC DI
INC DI
LOOP L1
JMP LAST
L2:
ROR AX,1
NEG AX
JMP L4
L3:
ROR AX,1
NEG AX
JMP L5
LAST:
MOV AH,4CH
INT 21H
CODE ENDS
END BEGIN
MOV DX,96
XOR DH,0FFH
SBB AX,DX
执行上述指令序列后,AX=_ffffh,CF=__1
2、设寄存器AL,BL,CL中内容均为76H,
XOR AL,0FH
AND BL,0FH
OR CL,0FH
执行上述指令序列后,AL=__79h
BL=______06h_____,CL=_____7fh_____
3、已知AX=0A33AH,DX=0F0F0H
AND AH,DL ah=a0h
XOR AL,DH al=cah
NEG AH
NOT AL
执行上述指令序列后,AH=___60h___,AL=____35h____
4、DATA SEGMENT
S9 DB0,1,2,3,4,5,6,7,8,9
DATA ENDS
┇
LEA SI,S9
LEA,DI,S9+1
MOV CX,5
LOP: MOV AL,[SI]
XCHG AL,[DI]
MOV [SI],AL
ADD SI,2
ADD DI,2
LOOP LOP
上述程序段运行后,S9开始的10个字节存储单元内容是什么?
S9 DB 1,0,3,2,5,4,7,6,9,8
5、MOV AL,38H
MOV BL,49H
CALL SUBO
INC AL
DEC CL
┇
SUBO PROC
ADD AL,BL
MOV CL,AL
DAA
RET
SUBO ENDP
上述程序段运行后,AL=______88h___,CL=____80h___
6、DA3 EQU WORD PTR DA4
DA4 DB 0ABH,89H
┇
SHR DA3,1
MOV DX,DA3
SHL DA4,1
MOV CX,DA3
上述程序段运行后,CX=___10ccH______,DX=_____1066H___
四、程序填空题(注意:下列各小题中,每空只能填一条指令!每小题6分,共12分)
1、下面程序段是判断寄存器AH和AL中第3位是相同,如相同,AH置0,否则AH置全1。试把空白处填上适当指令。
xor ah,al_____
AND AH,08H
jnz zero_____
MOV AH,OFFH
JMP NEXT
ZERO:MOV AH,0
NEXT:……
2、以BUF为首址的字节单元中,存放了COUNT个无符号数,下面程序段是找出其中最大数并送入MAX单元中。
BUF DB 5,6,7,58H,62,45H,127,……
COUNT EQU $-BUF
MAX DB?
┇
MON BX,OFFSET BUF
MOV CX,COUNT-1
MOV AL,[BX]
LOP1:INC BX
cmp al,[bx]____
JAE NEXT
MOV AL,[BX]
NEXT:DEC CX
jz lop1____
MOV MAX,AL
五、编制程序题(第1小题6分,第2小题14分,共20分)
1、编定程序段,用DOS的1号功能调用通过键盘输入一字符,并判断输入的字符。如字符是"Y",则转向YES程序段;如字符是"N",则
转向NO程序段;如是其他字符,则转向DOS功能调用,重新输入字符。(考生勿需写出源程序格式,只需写出与试题要求有关的指令序
列)
(YES和NO分别是两程序段入口处的标号)
CODE SEGMENT
ASSUME CS:CODE
BEGIN:
MOV AH,01h
INT 21H
CMP AL,'Y'
JZ YES
CMP AL,'N'
JZ NO
JMP BEGIN
YES:..
...
...
NO:...
...
...
MOV AH,4CH
INT 21H
CODE ENDS
END BEGIN
2、在BUF1和BUF2两个数据区中,各定义有10个带符号字数据,试编制一完整的源程序,求它们对应项的绝对值之和,并将和数存入以
SUM为首址的数据区中。
DATA SEGMENT
BUF1 DW-56,24,54,-1,89,-8……
BUF2 DW45,-23,124,345,-265,……
SUM DW10DUP(0)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
BEGIN:
MOV AX,DATA
MOV ES,AX
MOV DS,AX
LEA SI,BUF1
MOV BX, OFFSET BUF2
LEA DI,SUM
MOV CX,10
L1:
MOV AX,[SI]
ROL AX,1
JC L2
ROR AX,1
L4:
MOV DX,AX
MOV AX,[BX]
ROL AX,1
JC L3
ROR AX,1
L5:
ADD AX,DX
MOV [DI],AX
INC BX
INC BX
INC SI
INC SI
INC DI
INC DI
LOOP L1
JMP LAST
L2:
ROR AX,1
NEG AX
JMP L4
L3:
ROR AX,1
NEG AX
JMP L5
LAST:
MOV AH,4CH
INT 21H
CODE ENDS
END BEGIN
推荐于2018-05-17
展开全部
我也是学这门课,我试试吧。本人学的不是很精通,仅供参考。
1、CODE SEGMENT
ASSUME CS:CODE
MOV CX,OFFSET DATA
MOV DX,OFFSET MAX ;用LEA指令也可以
MOV AX,[CX]
MOV BX,[CX+1]
CMP AX,BX
JA LOOP1
MOV DX,BX
LOOP1:MOV DX,AX
CODE ENDS
END START
2、这个用TEST 指令就OK啦
是不是测试其中的低两位啊?
这样的话,主要的指令就是TEST AL,0011;低一位的话就是01
然后跳转就可以啦。
1、CODE SEGMENT
ASSUME CS:CODE
MOV CX,OFFSET DATA
MOV DX,OFFSET MAX ;用LEA指令也可以
MOV AX,[CX]
MOV BX,[CX+1]
CMP AX,BX
JA LOOP1
MOV DX,BX
LOOP1:MOV DX,AX
CODE ENDS
END START
2、这个用TEST 指令就OK啦
是不是测试其中的低两位啊?
这样的话,主要的指令就是TEST AL,0011;低一位的话就是01
然后跳转就可以啦。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.程序:
LEA SI,DATA
LEA DI,MAX
MOV AL,BYTE PTR[SI];取DATA开始的8位数
INC SI
MOV BL,BYTE PTR[SI]
CMP AL,BL
JA L1
MOV [DI],BL
L1:MOV [DI],AL
前后格式自己补吧,手机党,辛苦呀!
2.D2是第二位?还是低二位?看成第2位吧!方法类似!
CLC
LEA DI,EXIT
MOV CL,2
SHR AL,CL
ADC BL,0
CMP BL,1
JNZ LP
MOV [DI],BL
LP: …
前后格式自己补哦
LEA SI,DATA
LEA DI,MAX
MOV AL,BYTE PTR[SI];取DATA开始的8位数
INC SI
MOV BL,BYTE PTR[SI]
CMP AL,BL
JA L1
MOV [DI],BL
L1:MOV [DI],AL
前后格式自己补吧,手机党,辛苦呀!
2.D2是第二位?还是低二位?看成第2位吧!方法类似!
CLC
LEA DI,EXIT
MOV CL,2
SHR AL,CL
ADC BL,0
CMP BL,1
JNZ LP
MOV [DI],BL
LP: …
前后格式自己补哦
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1楼和2楼都犯同一个错误,把DATA放进16位寄存器,取出来的是16位数而不是8位无符号数…
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一个:
M segment
DATA db 250,100
MAX db ?
M ends
code segment
assume cs:code
main proc far
start:
push ds
sub ax,ax
push ax
mov ax,M
mov ds,ax
mov di,DATA
mov ax,[di]
cmp ax,[di+1]
jae store
mov ax,[di+1]
store:
mov MAX,ax
ret
code ends
end start
第二个:
code segment
assume cs:code
main proc far
start:
push ds
sub ax,ax
push ax
mov al,00100101B
mov cl,2
shr al,cl
and al,1
jnz exit
;
;此处是不为1的处理情况
;
ret
exit:
;
;此处是为1的处理情况
;
ret
code ends
end start
M segment
DATA db 250,100
MAX db ?
M ends
code segment
assume cs:code
main proc far
start:
push ds
sub ax,ax
push ax
mov ax,M
mov ds,ax
mov di,DATA
mov ax,[di]
cmp ax,[di+1]
jae store
mov ax,[di+1]
store:
mov MAX,ax
ret
code ends
end start
第二个:
code segment
assume cs:code
main proc far
start:
push ds
sub ax,ax
push ax
mov al,00100101B
mov cl,2
shr al,cl
and al,1
jnz exit
;
;此处是不为1的处理情况
;
ret
exit:
;
;此处是为1的处理情况
;
ret
code ends
end start
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询