网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月01日漏签0天
汇编吧 关注:45,337贴子:164,075
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 1回复贴,共1页
<<返回汇编吧
>0< 加载中...

复 CQUdf ,做几道题

  • 只看楼主
  • 收藏

  • 回复
  • fasmfan
  • 文件处理
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
不保证对,仅供参考。


  • fasmfan
  • 文件处理
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
题目来源:http://tieba.baidu.com/p/5982697172
;+----------------------------
4.下列程序段执行后实现什么功能?
  mov bx,2050h  ;取数组首地址
  mov cl,10  ;循环10次
next:
  mov al,[bx] ;从数组中取一个元素的值进al
  xor al,0ffh ;al取补码
  inc al   ;再加1,(到此完成正变负,负变正)
  and al,al  ;最高位为1吗?(现在是负数吗)
  jns down  ;现在不是负数(那就是正数)就跳转
  xor al,0ffh ;/否则再恢复原数仍放在al中
  inc al   ;\
down:
  mov [bx],al ;用al的值回写数组元素()
  inc bx   ;数组元素地址加1
  dec cl   ;循环次数减1
  jnz next  ;CL<>0就跳转。
  hlt
;结论:本段程序实现的功能是,在地址2050开始处有一10个元素
;   的字节数组,各元素为带符号数,编程完成将数组中为负
;   数的元素转换为正数元素。(或者表述为转换为绝对值..)
;+----------------------------
2.下列程序段执行后实现什么功能?
    mov si,2500h;取首地址进si
    mov cx,8  ;循环变量赋初值8
    xor ax,ax  ;ax清0
    mov ax,[si] ;从数组中取一数进al
    inc si   ;调整si
    inc si   ;si再加1
    dec cx   ;循环次数减1
next:        ;循环开始
    add ax,[si] ;ax加下一个数组元素
    add si,2  ;调整数组元素的地址
    loop next  ;(cx)=(cx)-1 ,如果(cx)<>0,则继续循环
        ;很明显,循环的功能是累加数组元素
        ;累加的结果保留在ax中
    mov [2000h],ax;将累加结果写入首地址为2000h的字单元。
    hlt
;结论,本段程序的功能是实现数组各元素求和,累加结果记入
;   [2000h]字单元
;+----------------------------
下列程序段执行后,问:程序实现什么功能?
    mov sp,2000h  ;栈指针赋值
    mov ax,[3000h] ;(ax) = x,假设x就是[3000h]
    mov bx,08h ;(bx)=8
    push bx   ;/通过栈操作实现
    pop dx   ;|(si)=(dx)=(bx)=8
    push dx   ;|
    pop si   ;\
    add ax,bx  ;(ax)=(ax)+(bx)=x+8
    mov cl,2  ;设置移位数
    sal ax,cl  ;/(ax)=4*(ax)=4(x+8)
    sal si,1  ;\(si)=2*(si)=2*8=16
    add ax,dx  ;(ax)=(ax)+(dx)=4(x+8)+8
    add ax,si  ;(ax)=(ax)+(si)=4(x+8)+8+16
    mov [4000h],ax ;记入存储器
    hlt
结论:程序实现 y = 4(x+8)+8+16 = 4x+32+24 = 4x+56
; 注:机器数左移一位相当于机器数扩大了一倍...,当然不能出现
;   溢出问题
;+----------------------------
;下列程序段执行后问:程序执行完后,堆栈中压入了几个数?
;按压入次序写出这些数据,该程序的功能。
    MB1 DB 255 ;
    ...
    mov al,MB1 ;(al)=[MB1]
    xor ah,ah  ;ah清0
    inc ax   ;(ax)=(ax)+1=255+1=256
    mov dx,10  ;设置除数为10
RL1:
    div dl   ;ax/dl 商在al中,余数在ah中
    mov bl,ah  ;/
    mov bh,0  ;|ah借道bx,将余数压栈
    push bx   ;\
    xor ah,ah  ;ah清0,为进入下一循环作好准备
    cmp al,0  ;商为0吗?
    jnz rl1   ;不为0就再循环一次
    hlt   ;
结论: 本程序实现将机器数255+1转换为十进制未压缩的BCD数,
   程序执行完后,堆栈中压入了3个数,压栈的顺序的6,5,2
;+-----------------------------
最后一题无聊,略。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1回复贴,共1页
<<返回汇编吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示