请教大神,汇编语言,编写一个统计AX中1的个数的程序,统计结果放在CL中。
循环16遍,逐次判断某位是1是0,加入到CL。
CODE SEGMENT
ASSUME CS:CODE
START: MOV CL,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
ASSUME CS:CODE
CODE SEGMENT
START:
MOV AX,1110011111110001B;假设现在AX有11个1
XOR CX,CX;将CX清零
MOV CH,16
NEXT:TEST AX,0001H; TEST和AND的功能差不多,只是TEST不改变AX的值
;让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:若有不明白的地方,可以追问
CODE SEGMENT
START:
MOV AX,1110011111110001B;假设现在AX有11个1
XOR CX,CX;将CX清零
MOV CH,16
NEXT:TEST AX,0001H; TEST和AND的功能差不多,只是TEST不改变AX的值
;让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:若有不明白的地方,可以追问
CODE SEGMENT
ASSUME CS:CODE
MOV AX,55AAH ;假设AX的值为55AAH
MOV CH,16 ;AX为16位的寄存器,所以按位处理,测试16次.
MOV CL,0 ;统计初值为0
S: ROL AX,1 ;循环左移或右移均可,每移一次,都把当前最高或最低位移到了CF中
JNC NEXT ;测试CF,如果为0不统计,否则CL加1
INC CL
NEXT:
DEC CH ;每测试完一次减1,没到0循环,否则结束.
JNZ S
MOV AX,4C00H
INT 21H
CODE ENDS
END
ASSUME CS:CODE
代码段
START:
MOV AX,1110011111110001B,假设现在AX 11
XOR CX,CX,CX清除
MOV CH的16 / >下一个:TEST AX,0001H;几乎TEST和功能,但不改变AX
测试的价值,让0,000,000,000,000,001和AX相
如果结果为0,AX是0 0
;否则,#0是1
JZ isZERO; 0,继续循环
INC CL 1,CL加1
isZERO
DEC CH
JZ EXIT;跳转到CH = 0,周期
SHR AX,1 JMP
EXIT EXIT,说明:
MOV AX,4C00H
INT 21H
代码结束
END START
PS:如果是这样,你不明白,你可以问
ASSUME CS:CODE
代码段
START:
MOV AX,1110011111110001B,假设现在AX 11
XOR CX,CX,CX清除
MOV CH的16 / >下一个:TEST AX,0001H;几乎TEST和功能,但不改变AX
测试的价值,让0,000,000,000,000,001和AX相
如果结果为0,AX是0 0
;否则,#0是1
JZ isZERO; 0,继续循环
INC CL 1,CL加1
isZERO
十二月CH
JZ EXIT;跳转到CH = 0,周期
SHR AX,1 JMP
EXIT EXIT,说明:
MOV AX,4C00H
INT 21H
代码结束
END START
PS:如果是这样,你不明白,你可以问
堆栈段
DB 64 DUP(?)
堆栈结束
代码段
承担CS:代码,SS:堆栈
启动:
MOV AX,1010011100101010B
呼叫CalcAmount
出口:
MOV AX,4C00H
INT 21H
CalcAmount:
(二进制数的统计AX包含1)
(结果放在CX)
XOR CX,CX
CA001:
每股斧1
JZ CA002
的JNC CA001的
INC CX
JMP短CA001
CA002:
INC CX;最后转移权利的AX为0,但CX没有添加填充
RET
结束代码结束开始
请教大神,汇编语言,编写一个统计AX中1的个数的程序,统计结果放在CL中...
CODE SEGMENT START:MOV AX,1110011111110001B;假设现在AX有11个1 XOR CX,CX;将CX清零 MOV CH,16 NEXT:TEST AX,0001H; TEST和AND的功能差不多,只是TEST不改变AX的值 ;让0000 0000 0000 0001和AX相与 ;如果结果是0,说明AX的第0位是0 ;否则,说明第0位是1 JZ isZERO ;是0,继续循...
求大神编程,汇编语言
;编写程序让红(00)(2424)移 CODES SEGMENT ASSUME CS:CODES START:MOV AH,0 ;建立彩色文本区80X25 MOV AL,3 INT 10H STUD: ;行首 MOV DX,0 PRINT: ;打印斜线 MOV AH,2 ;设置光标位置 MOV BH,0 ;页号送BH ;行号0送DH,列号0送DL INT 10H ;画形图像页号BH同 MOV AX,903H ;功能号...
求大神解答一下这段汇编语言每句话都是什么意思,完全看不懂,谢谢
最后5行是判断TEMP是不是负数(补码),如果最高位为1即为补码,减一取反,是求绝对值。
汇编语言!求大神指导!在线等!画对号的…
(1)源操作数为相对基址变址寻址,数据在数据段DS,其 EA=(BX)+(SI)+20H=0024H+0012H+20H=0056H PA=DS*10H+EA=091DH*10H+0056H=09226H 因为(00922H)=00F6H,所以(CL)=0F6H (2)第一条语句,源操作数为基址变址寻址,数据在数据段DS,其 EA=(BX)+(DI)=0024H+0032H=0056H PA...
请教大神 汇编语言刚开始学先学习哪种好?
推荐 intel汇编语言程序设计 第四版 先学intel 686指令集。然后再学win32SDK,就能开发出图形化程序了。要提高效率,学387指令和sse1,sse2,sse3指令集
汇编语言第二三题,求大神讲解,为啥啊!
第三题:相对第二题而言,本题为逆向转换过程。即将BCD码转化为16进制。将0101 1001 0110这个BCD码4位一组分开看,从高位到低位依次为:0101=0乘以2的3次方+1乘以2的2次方+0乘以2的1次方+1乘以2的0次方,结果为5,后三组如法炮制,分别的结果:9,6.所以综合起来转化后的16进制码为596H。
大一汇编语言编程题,求大神解答。
用 DEBUG 编程、调试,确实比较困难。但是,如果掌握了“引入代码”的方法,也就不算太难了。下图,就是程序代码,以及DEBUG 的运行结果:本程序,是计算:8888 1A2B * 5E6F 3C4D。乘积,最后放在 DX CX BX AX 中了。经过用计算器验算,乘积完全正确。
各位大神,问下汇编语言中如何定义和使用数组,急
汇编这样可以直接读写内存的程序也需要用到变量。但它不像其它高级语言那样把变量分成许多类型,它是按照变量的长度来区分的,所以定义(define)变量时就用5个不同的关键字:DB,DW,DD,DQ,DT(事实上常用的只有DB,DW)DB(DEFINE BYTE)即定义的变量占一个字节的长度(也可以说把定义的变量值放入一...
有木有汇编语言大神来帮帮忙啊,好人一生平安
DATA MOV DS, AX LEA SI, STR1 ;显示第1串 CALL DISP LEA SI, STR2 ;显示第2串 CALL DISP LEA SI, STR1 LEA DI, STR2 CALL STRCAT ;在字串1末追加字串2 LEA SI, STR1 ;显示追加后的 CALL DISPEXIT: MOV ...
求助大神,c51,汇编语言
keil C 语言中嵌入汇编语言进行混合编程,方法如下:1、在C 文件中要嵌入汇编代码片以如下方式加入汇编代码 pragma ASM ; Assembler Code Here pragma ENDASM 2、在Project 窗口中包含汇编代码的C 文件上右键,选择“Options for ...”在弹出的对话框中,点击右边的 “Generate Assembler SRC File”和...
端锦牛至: ASSUME CS:CODE CODE SEGMENT START: MOV AX,1110011111110001B;假设现在AX有11个1 XOR CX,CX;将CX清零 MOV CH,16 NEXT:TEST AX,0001H; TEST和AND的功能差不多,只是TEST不改变AX的值 ;让0000 0000 0000 ...
张湾区15994055274: 用汇编语言编写一个程序,统计一个8位二进制数中为1的位的个数 - ?
端锦牛至: 假设AL中存放的是需要的8位数 xor ah,ah mov cx,8 loop1: sal al,1 ;左移 adc ah,0 ;加CF loop loop1 最终结果AH中为1的个数.
张湾区15994055274: 用汇编语言,编写一个程序,统计一个8位二进制的数中的为"1"的位的个数. - ?
端锦牛至: ; ANL B, #0 MOV R7, #8 LP: RLC A JNC NEXT INC B NEXT: DJNZ R7, LP RET
张湾区15994055274: 编写一个汇编程序,关于统计字符串中某个字符串的个数!我是新手,望高手们帮帮忙! - ?
端锦牛至: DATA SEGMENT ;假原定字符串 TAB DB 'LQONE LQLQLQLQ TWO LQL1L2LQQLQ THERE QLLQLQQLQ!','$' LEN EQU $-TAB ;求字符串长度 DES DB 'LQ' ;要查找和统计的字符串 LEN1 EQU $-DES ;要查找的字符串长度 COUNT DW ...
张湾区15994055274: 编写一完整汇编程序,实现从键盘输入一串字符后,统计期中数字字符、英文字母个数并分别放在内存的numbers - ?
端锦牛至: 具体还是自己写吧,当从键盘读入一串字符后,做一个循环,依次比较每个字符的ASCII值,如果它的ASCII码值在48-57之间,则是数字,若它的ASCII值在65-90或97-122之间,则是英文字母.
张湾区15994055274: 微机原理,用汇编语言编写,给定一组数据,大概十个数,统计正数,负数,0的个数,并显示到屏幕上(重要) - ?
端锦牛至: org 100h DATA SEGMENT BUFFER DW 10 GREATZ DW ? ;正数 ZERO DW ? ;零 LITTLEZ DW ? ;负数 DATA ENDS START: MOV AX,DATAMOV DS,AX XOR AX,AX ;AX清零 MOV GREATZ,AX MOV ZERO,AX MOV LITTLEZ,AX LEA ...
张湾区15994055274: 菜鸟一枚,刚学汇编,编了个统计正负数的程序,怎么做不出来,跪求大神改改!!! - ?
端锦牛至: DATA SEGMENTBUF DW 2310,-43,31,-321,-1234,345,0,3213,0,5477NUM equ ($-BUF)/2 ;BUF数组中数字个数 POSITIVE DB 0 NEGATIVE DB 0 ZERO DB 0 DATA ENDS CODE SEGMENTASSUME CS:CODE ,DS:DATA MAIN PROC ...
张湾区15994055274: 求汇编大神 编写8086汇编语言程序统计BUFFER缓冲区的数字字符个数,并将 - ?
端锦牛至: 别忘了给采纳啊 assume cs:code, ds:data data segment buffer db 'Telephone Number is 010-66558760, call back Number is 0452-18990101' n equ $-buffer db '$' nd dw 0 lf db 0dh, 0ah, '$' data ends code segment start: mov ax,data mov ds,ax ;...
张湾区15994055274: 汇编语言,求高手,我是新学者,求一个简单的示范程序,看不懂啊!!! 要求,计算输入成绩的总分和平均分 - ?
端锦牛至: .model small.stack 100h.data msg1 db 'Input a score 1: $' msg2 db 0ah, 0dh, 'Input a score 2: $' msg3 db 0ah, 0dh, 'Input a score 3: $' msg4 db 0ah, 0dh, 'Input a score 4: $' msgerr db 0ah, 0dh, 'invailed score!$' msgsum db 0ah, 0dh, 'The total score ...
张湾区15994055274: 用汇编语言编写“计算1+2*3+3*4...+N*(N+1)”的程序 - ?
端锦牛至: M equ 自行定义,界定循环次数 N equ #2 S equ #1 Start:LDA #(N-1) Loop:INCA ;A寄存器值加一 MOV A,B ;把A寄存器值放到B寄存器中 INCBJSR Count ;跳转到Count子程序,进行计算 CMPA #M ;判断循环条件 BLO loop ;小于M的话继续循环 Print:输出 Count:MUL A,B RTS 对应C代码如下:#Define M 自行定义,界定循环次数 main() { int S=1; int N; for(N=2;N{ S+=N*(N+1); } printf("d%",S); }