一道简单的汇编语言问题求详细解答
(AX)=00H=0000 0000 0000 0000B ,(BX)=00H,(CX)=10H=0000 0000 0001 0000B
QQ:shr cx,1 ;是将cx逻辑右移1位,CX=0000 0000 0000 1000B,CF=0
RCR AX,1 ;带进位循环右移,AX=0000 0000 0000 0000 0000B,CF=0
ADD BX,1 ;bx=bx+1,BX=01H
LOOP qq ;CX-1,即CX=0000 0000 0000 0111B,不等于0,转到QQ继续循环。
为了看到每次循环的结果,将各次循环情况分别写在下面:
第二次循环情况:
QQ:shr cx,1 ;是将cx逻辑右移1位,CX=0000 0000 0000 0011B,CF=1
RCR AX,1 ;带进位循环右移,AX=1000 0000 0000 0000 0000B,CF=0
ADD BX,1 ;bx=bx+1,BX=02H
LOOP qq ;CX-1,即CX=0000 0000 0000 0010B,不等于0,转到QQ继续循环。
第三次循环情况:
QQ:shr cx,1 ;是将cx逻辑右移1位,CX=0000 0000 0000 0001B,CF=0
RCR AX,1 ;带进位循环右移,AX=0100 0000 0000 0000 0000B,CF=0
ADD BX,1 ;bx=bx+1,BX=03H
LOOP qq ;CX-1,即CX=0000 0000 0000 0000B,等于0,结束循环。
此时AX=4000H
AX和BX没什么直接关系,BX中存放实际循环的次数。
64*2=128 ,因为是字,所以*2才是字节
32*4=128 ,因为是双字,所以*4
y占2个字节
一共128+128+2=258个字节
258=102H,所以偏移地址应该是102H。
偏移地址就是这个变量和起始地址之间隔了多少字节。
64表示64个字 (dw)
32表示32个双字 (dd)
H表示16进制,100H表示16进制数100,等于10进制的256。
inc ax
adc bx,ax
loope l20
这三句就是要把递增的整数累加到bx里,说白了就是
bx=1+2+3+......
现在重要的是这个循环要做几次,也就是bx累加到几结束
shr dx,1
就是用来控制这个循环结束的。它把dx右移一位,并且如果dx里面结果为零了,那么要置zf这个标志位。loope看到zf被置位了就不再跳到L20去执行了。
那么dx里面开始有两个1(二进制),所以,loope总共跳转成功两次,那么bx加了3个数
bx=1+2+3
然后结束。所以bx为6
对不起,前面有几个地方说错了,还有你的前面代码没仔细看。解释如下:
首先bx是初始为2的,
其次循环只做了2次,而不是3次,因为0000 0011右移第一次还不会为0,所以loop跳转成功,而再移1次就为0了,这是loop就跳转不成功了。
那么bx=2+1+2的,这样结果会是5,所以还差1,这个1是这样来的
在第一次右移时,0000 0011会移出去一位1,这是把cf置1了,这很重要,而loope判断zf不为1,所以跳转到inc那条指令,inc是不会改变cf的,这点也很重要,所以cf仍然是1,后面adc bx,ax就是bx=bx+ax+1了,这样就得到多出来的那个1了。
另外xor ax,ax除了你说的清ax为0外,它还有很多重要的功能,例如让cf为0,让zf为1等等,这些都会影响程序的运行
MOV DX,3 ;初始化dx
SHR DX,1 ;dx逻辑右移1位。
bx=x0c
MOV DX,3 ;是(dx)=3
SHR DX,1 ;dx逻辑右移1bit,将移走的1bit送flag寄存器的c标志位
操作系统原理:详解汇编语言基础知识(图文代码)
深入理解操作系统:汇编语言的基石与内核探索 汇编语言,作为编程语言的基石,它的存在是为了直接与机器指令打交道,为程序员揭示硬件操作的底层逻辑。它与源程序、汇编程序和编译过程紧密相连,具有显著特点:每一条指令都对应于机器的直接操作,让你能清晰地观察程序执行的步骤;它与硬件的亲和性使得效率极...
汇编语言中MOV和OFFSET指令的两个问题?请高手指教小弟
1、从intel的指令代码集我们可以看到与段寄存器有关的有:MOV mem,segreg MOV segreg,mem MOV serreg,reg 很显然,不能把立即数赋值给段寄存器。DATA SEGMENT作为伪指令,在编译连接过程会被赋一个立即数的值。2、MOV SI,OFFSET STR MOV AX,[SI+2]这个是没错的。LEA SI,STR与MOV SI,OFFSET ...
汇编语言(面向机器的程式设计语言)详细资料大全
在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。普遍地说,特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。 许多汇编程式为程式开发、汇编控制、辅助调试提供了额外的支持机制。有的汇编语言编程工具经常会提供宏,它们也被称为宏汇编器。 汇编语言不...
急!几道简单的编程的题,求助!!急
楼主的问题实在太多了,时间关系,恕不能解答。路过,帮楼主一个小忙。下面是我曾经答过的一个帖子,保证没有错误。程序比较简单,故注释不多,请楼主自行分析。题目:编写统计学生程序,设有十个学生成绩分别是:56 69 84 82 73 88 99 63 100 80,统计低于60分,60~69,70~79,80~89,90~99...
汇编语言程序设计(高起专) 求大神帮助回答以下两道题
1(1)ADD VAR1,VAR2---两个操作数不能同时为内存单元(2)SUB AL,VAR1---第2个操作数为字单元,不匹配(3)JMP LAB[SI]---标号不能进行变址寻址(4)JNZ VAR1---不能转到变量,只能转到标号(5)JMP NEAR LAB---near 多余2(1)MOV BP,AL---传送的类型不匹配(2)MOV WORD_OP[BX+4*3]...
这道IBM PC汇编语言的题目怎么做啊
应该能看明白吧。
汇编需要程序技巧 二、单项选择题(5道小题,共15分) 1、子程序结束通常采...
1、子程序结束通常采用__B、RET__指令返回主程序。(3分)A、JMP B、RET C、IRET D、INT n 2、在DOS平台,汇编语言源程序文件通常采用__A、ASM__作为扩展名。(3分)A、ASM B、MAP C、LST D、OBJ 3、堆栈的操作原则可以描述为__C、先进后出__。(3分)A、先进先出 B、后进...
求人用汇编语言编程
assume cs:code,ds:data data segment num db 12h,45h,0f3h,6ah,20h,0feh,90h,0c8h,57h,34h sum db ?data ends code segment start: mov ax,data mov ds,ax mov bx,offset num mov cx,10 xor al,al next: add al,[bx]inc bx ...
简单的单片机的汇编语言编程的程序翻译
ORG 000H \/\/程序从内存地址000h开始执行 MOV P1,#0FFH \/\/将P1,P3置高 MOV P3,#0FFH \/\/如果P3没有置高,读取p3.0的值将会不准确 XH: JB P3.0,$ \/\/判断p3.0是否为低,若为高等待,为低继续往下执行,也就是键盘是否按下 ACALL DELAY \/\/调用延时子程序,键盘消抖 JB...
汇编语言编程
高级语言主要是相对于汇编语言而言,它并不是特指某一种具体的语言,而是包括了很多编程语言,如目前流行的VB、VC、FoxPro、Delphi等,这些语言的语法、命令格式都各不相同。 像最简单的编程语言PASCAL语言也属于高级语言. 高级语言所编制的程序不能直接被计算机识别,必须经过转换才能被执行,按转换方式可将它们分为两类:...
大叔齿生化:[答案] 操作数的物理地址 = 段寄存器中的段地址 * 10H + 段内偏移地址. 你这一题中,源操作数使用的是寄存器间接寻址方式,缺省段寄存器为DS. 所以,段地址 = (DS) = 8225H,偏移地址 = (DI)=3942H 物理地址 = 8225H * 10H + 3942H = 86192H
闸北区17652609714: 几道简单的汇编语言题求答案!我追加高的分数1.外部RAM1000H单元内容送寄存器R2中2.内部RAM20H单元内容送外部RAM 1000H单元3外部RAM20H单元... - ?
大叔齿生化:[答案] 1.外部RAM1000H单元内容送寄存器R2中 MOV DPTR,#1000H MOVX A,@DPTR MOV R2,A 2.内部RAM20H单元内容送外部RAM 1000H单元 MOV A,20H MOV DPTR,#1000H MOVX @DPTR,A 3外部RAM20H单元内容送外部RAM1000H单元 MOV ...
闸北区17652609714: 简单的汇编语言求解.请问SOURCE DB N DUP (0) 这句话是什么意思?DB是什么意思? DUP是什么 意思,谢谢. - ?
大叔齿生化:[答案] SOURCE是标号,DB就是定义字节单元,N和DUP是配合使用的,表示重复N次,括号里面的是单元的初始值 综合来讲,就是定义一个名叫SOURCE的由N个字节组成的储存单元,同时赋给初值0 等同于C中的: char SOURCE[N]; memset(SOURCE,...
闸北区17652609714: 关于汇编语言的一道简单题PARTNO DW PNAME DB 16 DUP(?)COUNT DD PLENTH EQU $ - PARTNO 则PLENTH的值为多少? 我想知道,$ - PARTNO它里... - ?
大叔齿生化:[答案] PARTNO DW ? 这一句是定义内存空间,占用一个字,即两个字节 PNAME DB 16 DUP(?)这一句是定义16个字节内存空间. COUNT DD ? 这一句是定义一个双字占4个字节内存空间. PLENTH EQU $-PARTNO 这一句是定义一个常数PLENTH,...
闸北区17652609714: 汇编语言很简单的一个问题 - ?
大叔齿生化: 首先这是一个十六进制数的相加,逢十六进一1406H +4E20H ----------6226H 其中H是十六进制的标识符,不参加运算,各位对应相加,要注意的是4+E,E是十进制的14,也就是4+14=18=16+2,此时要进位,该位余2,那么比它高一位的数相加就是1+4+1(进位的1)=6
闸北区17652609714: 初学者:求教汇编语言练习题的详细解释.具体运算过程,尤其是标志的改变阅读下列指令序列,填写执行结果(1)MOV DL,37HMOV AL,85HADD AL,... - ?
大叔齿生化:[答案] (1)DL=37H AL=37H AL=AL+DL=BCH AL=22H,DL=37H,CF为CY (2)DX=1F45H CF置1,为CY CX=95H CX=FF95H CF为... 我按lz的程序把每步的结果给出来了. lz其实可以用debug来看结果的,我们老师说上机单步执行看结果是很有助于学习汇编的...
闸北区17652609714: 简单的汇编题目!(我是初学者,麻烦大家进来看看帮帮忙啊) - ?
大叔齿生化: 1、指令MOV AX,CNT GT 20H中的CNT GT 20H是一个逻辑表达式,CNT是一个常量,前面已经赋值,CNT='A',大写字母'A'的ascii码是:41h,大于20h,所以这个表达式的值是'真'(汇编语言中,真=-1,假=0,许多高级语言也是这样规定的),-1的16位补码表示就是FFFFH. 2、MOV BX,LENGTH TAB BX=1 长度属性操作符(LENGTH)是针对内存变量的操作符,它返回重复操作符DUP中的重复数.如果有嵌套的DUP,则只返回最外层的重复数;如果没有操作符DUP,则返回1. 实际上,长度属性操作符(LENGTH)是返回数组元素的个数.
闸北区17652609714: 汇编语言 1任意两个数相加,减 乘 除;2:1+到n 要详细的过程,自己的想法思路. 急求!拜托 - ?
大叔齿生化:[答案] ;问题未指明硬件,暂用MCS51 ;题目未指明数据大小(格式),暂用8位无符号数 ;待运算数据分别存于40H/41H,结果存于42H,不计进位 ;加法 MOV A, 40H ADD A, 41H MOV 42H, A ;减法 MOV A, 40H SUBB A, 41H MOV 42H, A ;乘法 ...
闸北区17652609714: 求解一道汇编问题 - ?
大叔齿生化: 答:指令执行后,(AX) = 90F7H 过程:此条指令的寻址方式为基址变址寻址,有效地址为:(BX)+(SI)= 1200H + 0002H = 1202H 因为基址寄存器是BX,所以段地址在DS中,其值为 3000H 物理地址 = 段地址 * 10H + 有效地址 = 3000H*10H + 1202H = 31202H 源操作数为一个16位的字操作数.其低位字节在31202H中,高位字节在31202H+1=31203H中.根据题意,(31020H)= 0F7H, (31203H)=90H 所以,操作数为90F7H
闸北区17652609714: 汇编语言的一道基础题目求解 - ?
大叔齿生化: 12345678910111213141516171819202122232425262728293031323334353637 DA1 DB '01234' DA2 DB 5 DUP(0) MOV SI,0 MOV CX,5 LOP:;Loop 1, si = 0 MOV AL,DA1[SI] ; al <-'0', (al) = 30H ADD AL,11H ; (al) = 41H OR AL,01H ; (al) = 41...