很简单的问题

对数据段中以BX为偏移地址的连续4个字节的无符号数求和
xor ax,ax
是清零的意思吗?
三楼的兄弟解释一下整个程序,好吗??

1.逻辑地址 源程序经过汇编或编译后,形成目标程序,每个目标程序都是以0为基址顺序进行编址的,原来用符号名访问的单元用具体的数据——单元号取代。这样生成的目标程序占据一定的地址空间,称为作业的逻辑地址空间,简称逻辑空间。在逻辑空间中每条指令的地址和指令中要访问的操作数地址统称为逻辑地址。
2.物理地址 内存是由若干个存储单元组成的,每个存储单元有一个编号,这种编号可惟一标识一个存储单元,称为内存地址(或物理地址)。
3.标志寄存器 用来保存程序执行结果或者状态的寄存器,由各个标志位组成,标志寄存器中的标志位分两种类型:状态标志位和控制标志位,分别用来反应结果状态或控制程序执行的。
状态标志位常用的有ZF(零标志位)、SF(符号标志位)、PF(奇偶标志位)、CF(进位标志位)、OF(溢出标志位)、AF(辅助进位标志位);
控制标志位常用的有DF(方向标志位,用于串处理操作方向控制的)、TF(单步执行的跟踪标志位)、IF(中断允许标志位)。
4.存储器寻址方式 在指令中,有时要寻找操作数的地址,有时要寻找转移地址(如转移指令、CALL指令等),这些寻找地址的方式就称为寻址方式。8086微处理器寻找操作数地址有七种方式:立即寻址、寄存器寻址、直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址等;寻找转移地址的方式有段内寻址和段间寻址,它们又分为段内直接、段内间接、段间直接、段间间接寻址等。
5.补码 补码是计算机底层运算中,对运算符的一种表示方法。主要功能是将减法的运算转化为加法运算。
简单的说对于一个二进制数来说,正数的话它的原码,反码,补码都一样.
如果机器数是负数,反码是对它的原码(符号位除外)各位取反而得到的.
补码是对它的原码(除符号位外)各位取反,并在未位加1而得到的。

二.计算题(本大题共5小题,每小题4分,共20分)试按照各小题的要求给出计算结果。
1.将十进制数100分别转换为二进制、十六进制数,它们的表示形式分别为多少?
(1100100)2, (64)16

2.假设(DS)=0B00H,(BX)=0210H,对于指令MOV DS:120H[BX],AL,其目的操作数的物理地址为多少?
0B00H*10H+210H+120H = B330H
3.假设(BX)=0210H,(DI)=0060H,对于指令ADD DL,[BX][DI],其源操作数的偏移量为多少?
这道题说的不明白,偏移量是相对于谁的,如果相对于段,210H+60H=270H
如果相对于基址,就是DI,60H
4.假设当前(SP)=0060H,连续执行5条PUSH指令后,(SP)=?
执行push,指针减小,每次占用两个字节,60H-2*5 = 56H
5.对于一个十进制数 – 65,其二进制补码表示形式为多少?
(65)2 = 1000001,取反0111110,加一0111111,加符号10111111
三. 排错题(本大题共4小题,每小题5分,共20分)每小题列出了一条指令,判断该指令有无语法错误,如果存在语法错误,请指出具体的错误原因,判断正确给2分,分析正确给3分,判断错误不给分。
1.PUSH 5588H ;push的源操作数不能是立即数
2.MOV DS, 1720H ;给段寄存器赋值不能给立即数
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)= 1H,(BL)=B5H ,
CF= 1,OF=0 ,PF=0 .
2.阅读如下程序片段
MOV AL,0F3H
MOV DL,0C4H
ADD AL,DL
AND AL,0FH
执行上述程序片段后,(AL)=7 ,(AF)=0 ,CF=0 ,OF=0 ,PF=1.
3.阅读如下程序片段
MOV AL,7EH
MOV CL,04H
ROL AL,CL
执行上述程序片段后,(AL)= e7H,(CL)=4 ,
CF=1 ,OF=0 .
4.阅读如下程序片段
MOV AX,0632H
MOV BX,0C202H
SUB AX,BX
INC AX
执行上述程序片段后,(AX)=4431H ,(CF)= 1,
OF= 0.
5.阅读如下程序片段,假设(DS)=0100H,字节单元(01024H)=56H,字节单元(01025H)=28H
MOV BX,0024H ;bx = 24h
LEA BX,[BX] ;bx = 56h,cf=1
OR BX,0 ;bx=56h, cf=0
ADC BX,[BX] ;应该加56H那个单元的内容
执行上述程序片段后,(BX)= 56H+[01056H],(CF)=取决于[01056H]是多少,
OF= 取决于[01056H]是多少,.
这道题如果不是你贴错了,就是出题的搞错了
6.阅读如下程序片段,假设(SP)=0064H
MOV AX,0001H
MOV BX,0002H
PUSH AX
PUSH BX
POP CX
POP BX
执行上述程序片段后,(AX)= 1,(BX)=1 ,
(SP)= 64H,
五.程序设计题(本大题共2小题,第一小题7分,第二小题8分,共15分)
1.试编写一程序片段,实现BL高4位与低4位相互交换(7分)
push ax
mov al,bl
shl bx,1
shl bx,1
shl bx,1
shl bx,1
and al,f0
shr ax,1
shr ax,1
shr ax,1
shr ax,1
and al,0f
or bl,al
pop ax
2.试编写一程序片段,不使用乘除法指令,实现((AX)*5+14)/ 2的功能(AX中的数据理解为补码)(8分)
push bx
mov bx,ax
shl ax,1
shl ax,1
add ax,bx
add ax,14
shr ax,1
pop bx
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-06-26
...
mov cx,4 ;循环计数器赋4,代表循环4次
xor ax,ax ;ax异或ax,相同为0,ax和ax每一位都相同,所以ax全部位都会变成0,因为xor ax,ax的机器码很短,所以用它代替mov ax,0
lp:
xor dx,dx ;一样
mov dl,ds:[bx] ;从段地址DS,偏移地址为BX指向的内存空间取一字节传给DL
add ax,dx ;把dx加到ax中(16位加法,因为8位+8位可能产生多余8位的数)
inc bx ;指针右移1字节
loop lp ;返回循环
...

ax保存的就是连续4个字节的和……本回答被提问者采纳
第2个回答  2008-06-22
; This example shows how to add
; huge unpacked BCD numbers

#make_COM#

ORG 100h
JMP start
len EQU 5

; first number is: '79,521':
num1 DB 1,2,5,9,7
; second number is: '82,191':
num2 DB 1,9,1,2,8

; for keeping result,
; result will be '161,712':
sum DB 6 DUP (0)

start: ; entry point.

; digit pointer:
XOR BX, BX

; setup the loop:
MOV CX, len

next_digit:

; add digits:
MOV AL, num1[BX]
ADC AL, num2[BX]

; ASCII adjust:
AAA

; store result:
MOV sum[BX], AL

; point to next digit:
INC BX

LOOP next_digit

; include carry in result (if any):
ADC sum[BX], 0

; print out the result:
MOV CX, len+1
; start printing from
; less significant digit:
MOV BX, len

print_d:
MOV AL, sum[BX]
; convert to ASCII char:
OR AL, 30h

MOV AH, 0Eh
INT 10h

DEC BX

LOOP print_d

RET
END

参考资料:一个类似的例子,相信你照着这个很快就能做出来

第3个回答  2019-07-05
这可不一定,再说了,个性也要分很多种嘛,有的是性格方面,有的是穿着方面
第4个回答  2019-04-04
《网球王子》没结束...
《新撰组异闻录》..不知道
没听说过
对不起,答案PIA掉吧
相似回答