王爽《汇编语言》检测点2.1答案及解析

复习时可以先不看答案,再把题目做一遍:

检测点2.1:

(1)写出每条汇编指令执行后相关寄存器中的值。

mov ax, 62627 ; AX=_______

mov ah, 31H ; AX=_______

mov al, 23H ; AX=_______

add ax, ax ; AX=_______

mov bx, 826CH ; BX=_______

mov cx, ax ; CX=_______

mov ax, bx ; AX=_______

add ax, bx ; AX=_______

mov al, bh ; AX=_______

mov ah, bl ; AX=_______

add ah, ah ; AX=_______

add al, 6 ; AX=_______

add al, al ; AX=_______

mov ax, cx ; AX=_______

(2)只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。


答案与解析:

(1)写出每条汇编指令执行后相关寄存器中的值。

序号汇编指令AXBXCX
1mov ax, 62627F4A3H--
2mov ah, 31H31A3H--
3mov al, 23H3123H--
4add ax, ax6246H--
5mov bx, 826CH6246H826CH-
6mov cx, ax6246H826CH6246H
7mov ax, bx826CH826CH6246H
8add ax, bx04D8(al)H82(bh)6CH6246H
9mov al, bh04(ah)82H826C(bl)H6246H
10mov ah, bl6C82H826CH6246H
11add ah, ahD882H826CH6246H
12add al, 6D888H826CH6246H
13add al, alD810H826CH6246H
14mov ax, cx6246H826CH6246H

注:

  • 指令1中存入ax中的62627需转化为十六进制F4A3H,从而方便观察和计算:十进制整数转换为十六进制整数采用"除16取余,逆序排列"法。
  • AX的低8位(0位~7位)构成了AL寄存器,高8位(8位~15位)构成了AH寄存器。AH和AL寄存器是可以独立使用的8位寄存器(一个8位寄存器所能存储的数据的最大值为1111 1111B=2^8-1=255)
  • 为了区分不同的进制,十六进制数据后面加H,二进制数据后面加B,十进制数据后面什么也不加。
  • 指令9中需要计算826CH+826CH=?
    • 最末位C+C(H)=12+12=16+8=向前一位进1最末位留下8(H);
    • 倒数第二位为6+6(H)=C,加上最末位向前进的1,得D;
    • 第二位计算2+2(H)=4(H);
    • 第一位8+8(H)=16=向前进1,该位得0;
    • 综上826CH+826CH=104D8H,但是由于AX是16位寄存器,只能存放4位十六进制数据,所以最高位的1丢失,AX中的数据为04D8H。
  • 指令13中,AL+AL即88+88(H),最末位8+8(H)=16=往前进1,该位得0,第一位8+8(H)=16=往前进1,该位得0与后一位进的1相加最后得1,即88+88(H)=110H。但是由于AL是8位寄存器只能存储2位十六进制数据,所以最后AL中的数据是10H,110H首位的1丢失了。
  •    请记住,汇编指令mov ax, bx的意思是将寄存器bx中的数据送入寄存器ax,add ax,bx的意思是将ax和bx中的数值相加,结果送入ax中。寄存器名和汇编指令不区分大小写。

 (2)只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。

mov ax, 2
add ax, ax
add ax, ax
add ax, ax

注:

上述汇编指令每一步寄存及内的数据变化:

序号汇编指令AX对应高级语言表示
1mov ax, 22ax=2
2add ax, ax4ax=ax+ax(等号后的ax值为2)
3add ax, ax8ax=ax+ax(等号后ax的值为4)
4add ax, ax16ax=ax+ax(等号后ax的值为8)
2^4=2*2*2*2,指令2~4所对应的高级语言含义ax=ax+ax也可以理解为ax=ax*2,所以步骤就被拆分为:①ax=2;②ax=ax*2(2*2=4);③ax=ax*2(4*2=8);④ax=ax*2(8*2=16)。即可以理解为2^4=[(2*2)*2]*2。

总结:

1、需牢记从0~15二进制、十进制、十六进制的一一对应关系,做到熟练计算。

十进制二进制十六进制

0

00000
100011
200102
300113
401004
501015
601106
701117
810008
910019
101010A
111011B
121100C
131101D
141110E
151111F

2、当16位寄存器AX被分为两个8位寄存器AH,AL时,AL是作为一个独立的8位寄存器来使用的,和AH没有关系,CPU在执行这条指令时认为AH和AL是两个不想管的寄存器。不要错误地认为,诸如add al, 93H的指令产生的进位会存储在AH中,add al, 93H进行的是8位运算。


本博文是我在学习《汇编语言》王爽第三版时,一边学习一边做的笔记,可能会存在一些错误,欢迎大家来讨论和指正。

  • 12
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值