设AX寄存器中有一16位二进制数,编制汇编语言主程序,统计AX中1的个数,统计结果送入CX中
呵呵,楼上的,跑偏了哈! 楼主问的,不是单片机方面的。
假设楼主规定的10位数,是在AX的低10位中。 80x86汇编语言程序如下:
start:
MOV BX, 0
MOV CX, 10
NEXT:
SHR AX, 1 ;AX右移一位,末位进入CF
JNB NNNN ;CF为0转移.
INC BX ;CF为1则加一.
NNNN:
LOOP NEXT ;CX减一,非零转移.
MOV CX, BX ;把统计个数,送到题目指定的寄存器.
HLT ;停止.
END
----------
经过百度Hi交流,题目中,实际上是16位数字,不是10位数。
那么把:MOV CX, 10 中的10,改成16即可。
;程序已实现,主要考虑的是怎样获取1的个数
;具体以怎样的形式显示没有太在意
;个数存在BL中,若想以各种形式显示,调用不同的子函数即可(现在各种进制转换的汇编代码网上一堆)
code segment
assume cs:code
start:
mov ax,1234
mov bl,0;统计1的个数
mov cx,16;循环次数
loop1:
test ax,8000h;不断的左移,与8000h比较获取1的个数
jnz loop2
inc bl
shl ax,1
loop2:
loop loop1
;输出1的个数
mov dl,bl
add dl,30h
mov ah,02h
int 21h
mov ah,4ch
int 21h
code ends
end start
当然可以啊,
JNB表示无符号数的不低于,条件是计算结果的ZF=1或CF=0
编写一个程序,统计AX寄存器中1的个数,结果放在CL寄存器中(假设AX=0...
MOV AX,0FF37H ;循环对‘1‘的个数计数 REPEAT:TEST AX,OFFFFH ;Y=0?JZ EXIT JNS SHIFT ;正数则转移 INC CL ;负数则计数 SHIFT:SHL AX,1 JMP REPEAT ;结束程序返回操作系统 EXIT:MOV AX,4C00H INT 21H CODE ENDS END START ...
老师们,请帮我解答一下这个汇编。谢谢
mov ax,1的意思是往ax寄存器中写入立即数1,当然按照字长需要相等,实际上是0001H,AH中为00H,AL中为01H mov ax,[0000]的意思是将内存DS段中偏移为0的字数据传送到AX,也就是内存物理地址为DS x 10H + 0,具体值用Debug可以这样看:D DS: 0 1f 当然,如果DS是0,则就会得到8070H 另外,...
请教大神,汇编语言,编写一个统计AX中1的个数的程序,统计结果放在CL中...
;让0000 0000 0000 0001和AX相与 ;如果结果是0,说明AX的第0位是0 ;否则,说明第0位是1 JZ isZERO ;是0,继续循环 INC CL ;是1,CL加1 isZERO:DEC CH JZ EXIT;如果CH = 0,就跳转到EXIT,说明循环结束 SHR AX,1 JMP NEXT EXIT:MOV AX,4C00H INT 21H CODE ENDS END START PS...
汇编语言sal ax, 1是什么意思?
汇编语言sal ax, 1是将寄存器AX中的内容算术左移1位。SAL算术移位指令在执行时,实际上把操作数看成有符号数进行移位,最高位符号位移入CF,但本身保持原值;其余位顺序左移,次高位被舍弃。举例如下:MOV AX,8001H;(AX)=1000 0000 0000 0001B SAL AX,1 ;(AX)=1000 0000 0000 0...
编写一个程序 统计寄存器AX中二进制位“1”的个数,结果以1位十六进制...
我假定给AX一个数,再统计“1”的个数。我调试了的,答案运行正确 CODE SEGMENT ASSUME CS:CODE START:MOV AX,1234H XOR CX,CX XOR DX,DX MOV CL,16 ABC:SHL AX,1 JNB EXIT INC DL EXIT:LOOP ABC CMP DL,10 JB RRR ADD DL,7 RRR:ADD DL,48 MOV AH,02H INT 21H MOV AH,...
微机原理与接口技术 编写1个程序,统计寄存器AX中二进制位1的个数,结...
mov cl,16 ;ax是一个字,有16位二进制 mov dl,0 ;用于累加ax中1的个数 a:rol ax,1 ;循环左移1称,16次循环后复原 jnc next ;该位是0,则CF=0,这里就是测试CF的值,为0则跳转不累加 inc dl ;CF=1时,dl+1 next:loop a ;循环结构 add dl,30h ;将dl的值...
编写程序,统计寄存器AX中置1位的个数
mov cx, 16 loop1: rol ax, 1 jb one jmp loopp one: add count, 1 ;count是为保存1的个数定义的变量 loopp: loop loop1
编程汇编语言 用于统计AX寄存器中1的个数
MOV CX, 10 NEXT:SHR AX, 1 ;AX右移一位,末位进入CF JNB NNNN ;CF为0转移.INC BX ;CF为1则加一.NNNN:LOOP NEXT ;CX减一,非零转移.MOV CX, BX ;把统计个数,送到题目指定的寄存器.HLT ;停止.END --- 经过百度Hi交流,题目中,实际上是1...
用汇编语言编写一个程序,统计寄存器AX中二进制“1”的个数,结果一位...
;个数存在BL中,若想以各种形式显示,调用不同的子函数即可(现在各种进制转换的汇编代码网上一堆)code segment assume cs:code start:mov ax,1234 mov bl,0;统计1的个数 mov cx,16;循环次数 loop1:test ax,8000h;不断的左移,与8000h比较获取1的个数 jnz loop2 inc bl shl ax,1 loop2:l...
设AX寄存器中有一16位二进制数,编制汇编语言主程序,统计AX中1的个数...
JAE 、JNB、JNC 这三条指令完全等价。
家秀罗库: mov cx,16 xor bx,bx @1: rol ax,1 jnc @2 inc bx @2: loop @1 mov cx,bx
石泉县13754305301: 汇编程序 - ?
家秀罗库: ; 本程序通过编译,运行正确.Code Segment Assume CS:Code,DS:Code Start: clc mov ax,34567 mov cl,16 ;移位次数 xor bl,bl ;计数器清零 Counting: shl ax,1 jns $+4 ;符号位为0,不计数 inc bl ;符号位为1,计数 loop Counting mov ah,4ch ;结束程序 int 21h Code ENDS END Start ;编译到此结束
石泉县13754305301: 汇编:将AX寄存器中16位二进制数分成四组,每组四位,然后把这四组数分别放在AL、BL、CL、和DL中. - ?
家秀罗库: ;1.把ax寄存器内容分4组每组4位,然后把这4组数分别放在AL,BL,CL,DL中 assume cs:code code segment start: mov ax,1234h mov bx,ax mov cx,ax mov dx,ax and al,0fh ;al中是4 mov cl,4 shr bl,cl ;bl中是3 and ch,0fh ;ch中是2,先存在这,最后再给cl mov cl,4 shr dh,cl mov dl,dh ;dl中是1 mov cl,ch mov ax,4c00h int 21h code ends end start ;----------------------------------
石泉县13754305301: 汇编统计寄存器AX中的16位二进制数内"0"的个数 - ?
家秀罗库: 对你的代码调整如下: CODE SEGMENTASSUME CS:CODESTART:MOV AX,0000000000000001B XOR DL,DL ;dl记录0的个数MOV BX,10H ;循环16次 JUDGE:TEST AX,01HJZ WHEN0 ;当ax的最低位为0时就跳转到when0 ...
石泉县13754305301: 输入一个16位二进制,并保存到ax中 - ?
家秀罗库: mov ah,a mov si,200 mov dx,si mov byte ptr [si],11 int 21 inc si mov cl,[si] xor ch,ch inc si cld xor bx,bx shl bx,1 lodsb and ax,1 add bx,ax loop 115 mov ax,bx int 20 注意,这是在DEBUG里写的,所以里面的数字都是十六进制.好好研究一下吧,变成自己的好交差,不懂的再问吧
石泉县13754305301: 寄存器AX有多少字节 - ?
家秀罗库: AX是16位的存储空间,占两个字节,是在CPU内部的,其它寄存器也是这样补充: 所有寄存器都是这样的,当然EAX是32位的,还有的寄存器可能长度又不一样,但是性质都相同:CPU内部的存储器段寄存器、堆栈指针寄存器、指令指针寄存器等等寄存器只是存储的数据具有特殊含义而已,本质上是相同的.
石泉县13754305301: 用汇编语言,试编写一段程序段,把AX中的16位无符号二进制数转换成ASC码并显示在CRT显示器中 - ?
家秀罗库: MOV BX,AX MOV CH,4 NEXT0: MOV CL,4 ROL,BX,CL MOV DL,BL AND DL,0FH CMP DL,09H JBE NEXT1 ADD DL,07H NEXT1: ADD DL,30H MOV AH,02H INT 21H DEC CH JNZ NEXT0
石泉县13754305301: 编程将AX中的二进制数转化成ASCII码,转换的结果放在从ASCBUF开始的连续5个内存单元中.谢谢,最好注释一?
家秀罗库: 首先,AX中有16个二进制数位,从ASCBUF开始的连续5个内存单元中存放不了全部,所以要改成“转换的结果放在从ASCBUF开始的连续16个内存单元中”方法很简单:将AX寄存器循环向左移位,有进位则是1(存入其ASCII码31H),否则是0(存入其ASCII码30H).MOV CX,16MOV BX,OFFSET ASSBUFNEXT:ROL AX,1JC BE1MOV DL,30HJMP L1BE1:MOV DL,31HL1:MOV [BX],DLINC BXLOOP NEXT