1.程序分析题
ORG 2000H
ARY DW -4,3,-2,1
CNT DW $ -ARY
VAR DW ARY,$ +4
.
.
.
MOV AX,ARY ;AX=0FFFCH
MOV BX,OFFSET VAR ;BX=2008H
MOV CX,CNT ;CX=8
MOV DX,VAR+2 ;DX=200EH
LEA SI,ARY ;SI=2000H
此程序段执行后,
AX=0FFFCH
BX=2008H
CX=8
DX=200EH
SI=2000H
; -----------------------------------------
2,编程:已知某数组ARRAY中有100个带符号字节数,试用汇编语言编写一源程序,统计该数组中相邻两数间符号变换的次数,并将次数存放在NUM单元中。
cld
lea si,ARRAY ;取数组ARRAY地址
mov cx,100 ;数组元素个数
mov NUM,0 ;计数器清零
lodsb ;读入第一个数组元素至累加器al
dec cx
and al,80h ;保留符号位,屏蔽掉其余各位
rol al,1 ;循环左移一位,符号位进入第0位
mov ah,al ;作为相邻两数间符号是否变换的比较对象
Count:lodsb ;读入一个数组元素至累加器al
and al,80h
rol al,1
xor ah,al ;相邻两元素符号位异或,相同则0,相异则1
add NUM,ah ;计数
mov ah,al ;保存当前元素符号位
loop Count ;循环,处理下一个元素
; -----------------------------------------
3,编程:从AA单元开始的30个连续单元中存放有30个无符号数,从中找出最大数送入BB单元中,试编程。
假设这30个无符号数都是字节元素。
cld
lea si,AA
lodsb ;装入第一个元素,作为最大数初值
mov cx,29
Compare:
cmp al,[si]
jae $+4 ;当前最大数>=当前元素
mov al,[si] ;当前最大数<当前元素,更新最大数
inc si
loop Compare
mov BB,al ;最大数送BB单元
搂主高手啊!玩起汇编了都
太深奥了哈!