编写程序(用汇编语言编写) 1,两个省人口数(99887766人,66554433人)相加,结果存放在相邻内存中。

2,求十进制数的累加和,即求1+2+...+99的结果,该结果也用BCD表示。3,编写程序将ELEMS中的100个字节数据的位置颠倒过来,即第1与第100个字节内容交换,... 2,求十进制数的累加和,即求1+2+...+99的结果,该结果也用BCD表示。
3,编写程序将ELEMS中的100个字节数据的位置颠倒过来,即第1与第100个字节内容交换,第2个与第99个字节内容交换,.........
4,编写符号函数Y=sign X的三分支程序。
一起四道题,拜托快点~~写的好 可以追加悬赏!!!!!!
展开
 我来答
davidrin
2010-11-25 · TA获得超过1788个赞
知道小有建树答主
回答量:718
采纳率:100%
帮助的人:805万
展开全部
第一题:
.model small
.stack 8192
.data
pop1 dd 99887766
pop2 dd 66554433
sum dd ?

.code
main: mov ax,@data
mov ds,ax

;这里开始是做加法的代码

mov ax,word ptr pop1
mov dx,word ptr pop1[2]
add ax,word ptr pop2
adc dx,word ptr pop2[2]
mov word ptr sum,ax
mov word ptr sum[2],dx

;至此结果放在双字变量sum中,sum与pop2是相邻的

mov ah,4ch
int 21h
end main

第二题:
.model small
.stack 8192
.data
sum dw ?
sumbcd dw ?

.code
main: mov ax,@data
mov ds,ax

xor ax,ax ;累加器清零
mov cx,99 ;cx是循环变量
lp1: add ax,cx ;从99倒着加到1,和在AX里
loop lp1
mov sum,ax ;至此sum里存了累加和本身

mov si,10 ;下面通过除以10,将该和的每个数字剥离出来、并转为BCD码存到sumbcd里
xor bx,bx ;bx里用来存bcd码结果
mov cx,4 ;转BCD时每个数字要将bx右移4位,在把AH里的余数合并到dx的最高4位上,4次之后形成整个BCD结果
lp2: xor dx,dx ;为除法清除dx内容
div si ;8位除法完成后,dx内是每次的余数,ax里是商。第一次除完余数是个位、下次是十位……
push cx ;下面移位需要用CL寄存器,但CX用来做循环控制变量,所以需要先保存一下
mov cl,4 ;这里的cl为4是用来循环用
shr bx,cl ;将BX右移4位,左边会补0
shl dl,cl ;DL左移4位,右边补零
or bh,dl ;BX左边的4个补入的0填上DL里的余数的那个数位
pop cx ;恢复CX里的循环次数
loop lp2
mov sumbcd,bx ;sumbcd里存了BCD的结果,注意是十位、个位合并为一个字节在前面、千位和百位合并为另一字节在后面

mov ah,4ch
int 21h
end main

第三题:
.model small
.stack 8192
.data
elem db 10 dup ('0123456789')
tail equ $

.code
main: mov ax,@data
mov ds,ax

mov si,offset elem ;si指针从前向后走
mov di,offset tail-1 ;di指针从后向前走
lp: cmp si,di ;比较两个指针
jge done ;如果si>=di,则头尾已经相遇了,则结束
mov al,[si] ;al里取前面指针处的内容
xchg [di],al ;和后面指针处交换
mov [si],al ;存回前面指针处
inc si ;移动前指针
dec di ;移动后指针
jmp lp ;继续下个
done:

;至此elem内容已经如要求交换完

mov ah,4ch
int 21h
end main

第四题:
.model small
.stack 8192

.code
main: mov ax,-100
call sign
mov ax,100
call sign
mov ax,0
call sign

mov ah,4ch
int 21h

sign proc
cmp ax,0 ;ax与0作比较
jz sign1 ;是0的话直接返回(结果不用变,还是0)
mov ax,1 ;其它两种情况分别返回+1或-1,先设定为正1,注意MOV指令不影响刚才CMP比较的结果标志位
jg sign1 ;如果刚才比较得到ax>0,转返回(现在AX里是表示正数的1)
neg ax ;把AX里的1变成-1
sign1: ret ;返回,值在AX里
sign endp

end main
diy555jl
2010-11-25
知道答主
回答量:26
采纳率:0%
帮助的人:0
展开全部
8086?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式