汇编语言

阅读 / 问答 / 标签

汇编语言中的“移位指令”具体的操作是什么?

SHL/SAL一样:逻辑/算术左移,最高位进到CF,最低位补0;x0dx0aSHR:逻辑右移,最低位进到CF,最高位补0;x0dx0aSAR:算术右移,最低位进到CF,最高位不变;x0dx0aROL:循环左移,最高位进到CF的同时补到最低位;x0dx0aROR:循环右移,最低位进到CF的同时补到最高位;x0dx0aRCL:带进位循环左移,最高位进到CF的,同时CF值补到最低位;x0dx0aRCR:带进位循环右移,最低位进到CF的,同时CF值补到最高位;x0dx0aSHLD:双精度左移,第二个操作数移位到第一个操作数,第一操作数进到CF,和逻辑左移类似,低位移到高位;x0dx0aSHRD:双精度左移,第二个操作数移位到第一个操作数,第一操作数进到CF,和逻辑由移类似,高位移到低位;x0dx0ax0dx0a这样差不多可以了吧。

汇编语言高手进,急用,在线等答案!请确保答案的正确性!

1..386extrn _bout:farcode segment para use16 assume cs:codebegin: mov ax,0101010B xor dl,dlagain: bsf cx,ax cmp ax,0 jnz next jmp exitnext: inc dl call far ptr _bout btr ax,cx jmp againexit: mov ah,4cH int 21Hcode ends end begin2. ;代码 cmp dx,bx ja l2 jz next0 jmp l1next0: cmp ax,cx ja l2 jmp l13.(1) btc ax,024 (2) and al, 00101010B cmp al, 00101010B jz l1 (3) pushf pop ax (4) mov es,seg mov di,3000H mov al,0 mov cl,50next: stosb dec cl jnz next (5) ;逻辑左移 shld dx,ax mov cl,4 shl ax,cl (6) ;结果存放在dx:ax bt dx,15 jc s0 jmp exits0: mov cx,0 sub cx,ax mov ax,cx mov cx,0 sbb cx,dx mov dx,cxexit: .........

汇编语言中的移位指令具体的操作是怎样的呢?

SHL/SAL一样:逻辑/算术左移,最高位进到CF,最低位补0;SHR:逻辑右移,最低位进到CF,最高位补0;SAR:算术右移,最低位进到CF,最高位不变;ROL:循环左移,最高位进到CF的同时补到最低位;ROR:循环右移,最低位进到CF的同时补到最高位;RCL:带进位循环左移,最高位进到CF的,同时CF值补到最低位;RCR:带进位循环右移,最低位进到CF的,同时CF值补到最高位;SHLD:双精度左移,第二个操作数移位到第一个操作数,第一操作数进到CF,和逻辑左移类似,低位移到高位;SHRD:双精度左移,第二个操作数移位到第一个操作数,第一操作数进到CF,和逻辑由移类似,高位移到低位;这样差不多可以了吧。

如何用汇编语言将时间转换成七段码显示出来?

不能说清楚点吗

微机汇编程序高手! 设计任务 信号发生器产生梯形波 源程序要使用汇编语言 程序今晚要 符合要求悬赏可以加

;***********Editor by zzy*********************** ;***********v.1.1.23 ;******************************************** IOY0 EQU 0D400H ;片选IOY0端口始地址 IOY1 EQU 0D440H ;片选IOY1端口始地址 IOY2 EQU 0D480H ;片选IOY2端口始地址 IOY3 EQU 0D4C0H ;片选IOY3端口始地址 ;******************************************** ADC0809 EQU IOY0+00H ;ADC0809端口地址 PA55 EQU IOY1+00H ;8255的A口地址 PB55 EQU IOY1+04H ;8255的B口地址 PC55 EQU IOY1+08H ;8255的C口地址 PCTL EQU IOY1+0CH ;8255的控制寄存器地址 DAC0832 EQU IOY2+00H ;DAC0832端口地址 TIMER0 EQU IOY3+00H ;8254计数器0端口地址 TIMER1 EQU IOY3+04H ;8254计数器1端口地址 TIMER2 EQU IOY3+08H ;8254计数器2端口地址 TCTL EQU IOY3+0CH ;8254控制寄存器端口地址 STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS DATA SEGMENT STR1 DB "Please input password:",0AH,0DH,"$" STR2 DB "The password is not right !!!Please try again!!!",0AH,0DH,"$" STR3 DB "Welcome to the signal creat machine",0AH,0DH,"Loading ADC0809.....",0AH,0DH,"$" STR4 DB "DIS",0AH,0DH,"$" DTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H ;7段数码管的段位值 STABLE DB 80H,8CH,98H,0A5H,0B0H,0BCH,0C7H,0D1H,0DAH,0E2H,0EAH,0F0H,0F6H,0FAH,0FDH,0FFH,0FFH,0FDH,0FAH,0F6H,0F0H,0EAH,0E2H,0DAH,0D1H,0C7H,0BCH,0B0H,0A5H,98H,8CH,80H,7FH,73H,67H,5AH,4FH,43H,38H,2EH,25H,1DH,15H,0FH,09H,05H,02H,00H,00H,02H,05H,09H,0FH,15H,1DH,25H,2EH,38H,43H,4FH,5AH,67H,73H,7FH AD DB ? ; 保存ad转换结果 PASSWORD DB 41H,42H,43H,44H ;预设密码 要改!!!! PW DB 4 DUP (?) ;密码预留 YU DB 20 DUP (?) ;预留20个空间存放数据DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX L0: MOV DX,OFFSET STR1 ;显示提示信息 MOV AH,9 INT 21H MOV SI,OFFSET PW MOV CX,4 SCAN: MOV AH,01H INT 21H CMP AL,"E" JZ QUIT MOV [SI],AL INC SI LOOP SCAN CALL COMP;看不懂 CMP AL,4 JB ERRO;什么意思 JMP RIGHT ERRO: MOV DX,OFFSET STR2 ;显示提示信息 MOV AH,9 INT 21H JMP L0 RIGHT: MOV DX,OFFSET STR3 ;显示提示信息 MOV AH,9 INT 21H CALL CLK ;ADC0809 CLK输入 ,启动8254 MOV DX,PCTL ;初始化8255工作方式 MOV AL,88H ;1000 1000方式0,A口,B口输出,C口高四位输入 OUT DX,AL ; DISAD: CALL AD0809 MOV DL,0FFH ;判断主键盘有无键按下 MOV AH,6 INT 21H JZ DISAD CMP AD,15H JNB M1 CALL JIETI JMP L0 M1: CMP AD,80H JNB M2 CALL SIN JMP L0 M2: CMP AD,0A0H JNB M3 CALL TIXING JMP L0 M3: CMP AD,0C0H JNB M4 CALL FANG500 JMP L0 M4: CALL FANG1K JMP L0 QUIT: MOV AX,4C00H ;结束程序退出 INT 21H COMP PROC NEAR MOV AL,0 ;初始化al,AL中保存相同字符的个数 MOV SI,OFFSET PW MOV DI,OFFSET PASSWORD MOV CX,4COMPLOOP: MOV AH,[DI] CMP [SI],AH JZ COMPS1 JMP COMPS2COMPS1:INC ALCOMPS2:INC SI INC DI LOOP COMPLOOP RETCOMP ENDPDIS PROC NEAR ;显示键值子程序 PUSH AX ;以缓冲区存放的键值为键值表偏移找到键值并显示 MOV SI,3000H MOV DL,0FDH MOV AL,DLAGAIN: PUSH DX MOV DX,PA55 OUT DX,AL ;设置X1~X4,选通一个数码管 MOV AL,[SI] ;取出缓冲区中存放键值 MOV BX,OFFSET DTABLE AND AX,00FFH ADD BX,AX MOV AL,[BX] ;将键值作为偏移和键值基地址相加得到相应的键值 MOV DX,PB55 OUT DX,AL ;写入数码管A~Dp CALL DALLY INC SI ;取下一个键值 POP DX MOV AL,DL TEST AL,01H ;判断是否显示完? JZ OUT1 ;显示完,返回 ROR AL,1 MOV DL,AL JMP AGAIN ;未显示完,跳回继续OUT1: POP AX RETDIS ENDPAD0809 PROC NEAR ;将IN0结果保存于bl中 MOV DX,ADC0809 ;启动0809的IN0 OUT DX,AL AD1: MOV DX,PC55 IN AL,DX CMP AL,80H JB AD1 MOV DX,ADC0809 IN AL,DX MOV AD,AL MOV AH,AL AND AL,0FH MOV SI,3000H MOV [SI],AL MOV CL,4 SHR AH,CL MOV [SI+1],AH CALL DIS RETAD0809 ENDP CLK PROC NEAR ;方波CLK时钟18.432K子程序 ;****初始化8254计数器0工作在方式3,以十进制计数,初值为100******* PUSH DX ;保护现场 PUSH AX ;保护现场 MOV DX,TCTL MOV AL,17H ;0001 0111B OUT DX,AL MOV DX,TIMER0 ;装初值100 MOV AL,100D OUT DX,AL POP AX ;恢复现场 POP DX ;恢复现场 RET CLK ENDPFANG1K PROC NEAR ;方波1KHz子程序 ;***初始化8254计数器1工作在方式3,以十进制计数; ue0ce踔滴?84****** PUSH DX ;保护现场 PUSH AX ;保护现场 MOV DX,TCTL MOV AL,56H ;0101 0110B OUT DX,AL MOV DX,TIMER1 MOV AL,184 OUT DX,AL MOV DL,0FFH ;判断主键盘有无键按下 MOV AH,6 INT 21H POP AX ;恢复现场 POP DX ;恢复现场 RET FANG1K ENDPFANG500 PROC NEAR ;方波500Hz子程序 ;***初始化8254计数器1工作在方式3,以十进制计数,初值为368****** PUSH DX ;保护现场 PUSH AX ;保护现场 MOV DX,TCTL MOV AL,76H ;0111 0110B OUT DX,AL MOV DX,TIMER1 MOV AL,70H ;368D分高低位写入 OUT DX,AL MOV AL,01H OUT DX,AL MOV DL,0FFH ;判断主键盘有无键按下 MOV AH,6 INT 21H POP AX ;恢复现场 POP DX ;恢复现场 RET FANG500 ENDP JIETI PROC NEAR ;阶梯波子程序 PUSH DX PUSH AX J0: MOV AL,00H J1: MOV DX,DAC0832 OUT DX,AL CALL JIETIDALLY ADD AL,33H CMP AL,0FFH JNE J1 MOV DL,0FFH ;判断主键盘有无键按下 MOV AH,6 INT 21H JZ J0 POP AX POP DX RET JIETI ENDPSIN PROC NEAR ;正弦波子程序 PUSH AX PUSH BX PUSH DX S1: MOV SI,OFFSET STABLE MOV CX,64D S2: MOV AL,[SI] MOV DX,DAC0832 OUT DX,AL INC SI LOOP S2 MOV DL,0FFH ;判断主键盘有无键按下 MOV AH,6 INT 21H JZ S1 POP DX POP BX POP AX RET SIN ENDP TIXING PROC NEAR ;梯形波子程序 T : MOV AL,7FH MOV DX,DAC0832 OUT DX,AL CALL TIXINGDALLY T2: MOV DX,DAC0832 OUT DX,AL DEC AL CMP AL,00H JNZ T2 T3: MOV DX,DAC0832 OUT DX,AL INC AL CMP AL,7FH JNZ T3 MOV DL,0FFH ;判断主键盘有无键按下 MOV AH,6 INT 21H JZ T RET TIXING ENDP ;****延时子程序********************** DALLY PROC NEAR PUSH CX PUSH AX MOV CX,4000H D1: MOV AX,0600H D2: DEC AX JNZ D2 LOOP D1 POP AX POP CX RET DALLY ENDP JIETIDALLY PROC NEAR PUSH CX PUSH AX MOV CX,1000H DD1: MOV AX,10H DD2: DEC AX JNZ DD2 LOOP DD1 POP AX POP CX RET JIETIDALLY ENDP TIXINGDALLY PROC NEAR PUSH CX PUSH AX MOV CX,1000H DDD1: MOV AX,0FFH DDD2: DEC AX JNZ DDD2 LOOP DDD1 POP AX POP CX RET TIXINGDALLY ENDP CODE ENDS END START

K1-K4 控制数码管移位演示 汇编语言编写

做没什么问题,就是太费时间。

汇编语言中的rep指令的作用有哪些

一般都是用来循环赋值比如说把一段内存拷到另一段里面去比如说复制一段字符串到另一段里面去

汇编语言的rep是什么

1.rep movsd 每次ecx!=0便执行movsd ,然后ecx=ecx-1 movsd移动ds:[si] 到es:[di],在32位汇编下可以用esi代替si,edi代替di2.同时由于在一般exe中ds = es 程序起始位置所以另esi = offset @s1就可以找到变量s1 ,edi= offset @s2就可以找到变量s2 。3.movsd此类指令有个性质,当标志位d=0时执行一次esi = esi +1,edi= edi+ 1 d=1时执行一次esi = esi +1,edi= edi+ 1所以此段指令的含义是从s1复制ecx个dword到s2。

急,汇编语言中OFFSET的一个用法,请指教。

TABLE DW 1,2,3,4,5,6ENTRY EQU 3CNT EQU $-TAB MOV BX,OFFSET TABLE OFFSET 是返回TABLE偏移地址,(BX)=0000HADD BX,ENTRY (BX)=(BX)+(ENTRY )=0003HMOV AX,WORD PTR [BX] MOV BX,CNT ;

汇编语言中的 offset

mov ax,offset 0A20H是数值地址0A20H的偏移地址0A20H给AX

汇编语言中的 offset什么意思

mov ax,offset 0A20H是数值地址0A20H的偏移地址0A20H给AXmov ax,offset 0A20H是数值地址0A20H的偏移地址0A20H给AX

汇编语言中proc far是什么意思

proc是子程序定义伪指令,far是该子程序的属性,决定调用程序和子程序是否在同一代码段如下:为子程序定义及说明 子程序名 PROC NEAR(或FAR) ……ret子程序名 ENDP 子程序名为符合语法的标识符NEAR属性(段内近调用): 调用程序和子程序在同一代码段中,只能被相同代码段的其他程序调用;FAR属性(段间远调用): 调用程序和子程序不在同一代码段中,可以被相同或不同代码段的程序调用.

汇编语言中proc far是什么意思

在汇编语言中,不仅仅是 PROC FAR,还有别的。你没有写全。

汇编语言中的proc伪指令和proto伪指令的区别?

一个定义过程 一个是声明过程

汇编语言main proc far是什么意思

你说的大概是这么一种程序框架:mainprocfarpushdsxorax,axpushax......retmainendpendmain这是一种最原始的dos下exe程序的框架。那时候,dos的版本很低,dos还没有提供4ch号dos功能调用,结束程序只能用int20h完成。而int20h结束程序要求执行时cs指向程序段前缀(psp)所在的段地址。所以,程序需要将主程序定义成远调用过程(procfar),这样就会将ret指令汇编成远调用返回(retf)。而代码开始的三条指令是将psp段地址入栈,再将0入栈。这样,执行ret的时候就会执行到psp段偏移地址为0处的一条int20h指令,保证正确返回dos。后来稍高一点版本的dos有了4ch号功能调用,就不需要这种程序框架了。教科书上很多程序是抄来的,所以人们还常常会看到这种早就过时被淘汰了的代码。

计算机汇编语言:写出把FLAGS中的SF位置1的两条指令

MOV AL,0C1HSHL AL,1

汇编语言中执行INT操作后FLAGS要发生变化吗

对于(FLAGS)=1240H可知在标志寄存器里面的值为:0001 0010 0100 0000 其中DF=0,IF=1.执行中断后即为:0001 0100 0100 0000 即DF=1,IF=0.所以执行int 14h后FLAGS的内容为1440H.

汇编语言中flags称为

标志寄存器

8086汇编语言的问题

学习中

8086的编程题(使用汇编语言)

.MODEL SMALL.STACK.DATASCORES DB 0,10,80,100,90,73,43,60,63,72,88,42,58,99,100,89,65,61,74,84,79,2,60,61,62,62,66,82,79,71,62,63COUNTS DW $-SCORESMD DB "$"SCOREE DB 0SCORED DB 0SCOREC DB 0SCOREB DB 0SCOREA DB 0SE DB "LEVER E: $"SD DB "LEVER D: $"SC DB "LEVER C: $"SB DB "LEVER B: $"SA DB "LEVER A: $".CODE.STARTUPCALL STATISTICSMOV DX,OFFSET SECALL SHOWFMOV AL,SCOREECALL SHOWRESULTCALL ENTERF;-------------MOV DX,OFFSET SDCALL SHOWFMOV AL,SCOREDCALL SHOWRESULTCALL ENTERF;------------------MOV DX,OFFSET SCCALL SHOWFMOV AL,SCORECCALL SHOWRESULTCALL ENTERF;-------------------MOV DX,OFFSET SCCALL SHOWFMOV AL,SCORECCALL SHOWRESULTCALL ENTERF;----------------MOV DX,OFFSET SBCALL SHOWFMOV AL,SCOREBCALL SHOWRESULTCALL ENTERF;---------------MOV DX,OFFSET SACALL SHOWFMOV AL,SCOREACALL SHOWRESULTCALL ENTERF.EXIT 0SHOWF PROC MOV AH,09H INT 21H RETSHOWF ENDPSHOWRESULT PROC CBW MOV BX,AX PUSH BX MOV CL,4 SHR BL,CL .IF BL!=0 MOV DL,BL ADD DL,30H MOV AH,02H INT 21H .ENDIF POP BX AND BL,0FH MOV DL,BL .IF BL>0AH ADD DL,7 .ENDIF ADD DL,30H MOV AH,02H INT 21H RET SHOWRESULT ENDPSTATISTICS PROC ;入口参数,将数组首地址和长度传入 MOV BX,OFFSET SCORES MOV CX,COUNTS MOV SI,0 .REPEAT .IF BYTE PTR [BX][SI]<60 INC SCOREE .ELSEIF BYTE PTR [BX][SI]<70 INC SCORED .ELSEIF BYTE PTR [BX][SI]<80 INC SCOREC .ELSEIF BYTE PTR [BX][SI]<90 INC SCOREB .ELSEIF BYTE PTR [BX][SI]<=100 INC SCOREA .ENDIF ADD SI,1 .UNTILCXZ RETSTATISTICS ENDPENTERF PROC MOV DL,0DH MOV AH,02H INT 21H MOV DL,0AH MOV AH,02H INT 21H RETENTERF ENDPEND

求编写一道汇编语言程序,要求完成一定功能(任意)【高分追加】

DATASEG segmentMSGDIR DB "PLEASE INPUT THE DIR(eg d:):",13,10,"$"MSGFILENAM DB 13,10,"PLEASE INPUT THE FILENAME:",13,10,"$"RESULT DB "RESULT.TXT",0,"$"SUMFILE DB 13,10,"SUM OF FILES ARE:",13,10,"$"SUMFILEN DB ?,?,?,?,0DH,0AH ;STRING OF THE SUMNUMFOUNDFILE DB 13,10,"FOUND FILES ARE:",13,10,"$"FOUNDFILEN DB ?,?,?,?,0DH,0AH ;STRING OF TEH FOUNDNUMSP_CRE_ERR DB "CREATE RESULT FILE ERR!",13,10,"$"SP_OPE_ERR DB "OPEN THE RESULT FILE ERR!",13,10,"$"SP_WRI_ERR DB "WRITE TO THE RESULT FILE ERR!",13,10,"$"SUMNUM DW 0 ;NUM OF ALL THE FILESFOUNDNUM DW 0 ;NUM OF GOAL FILE;PATH_PRS DW ? ;POINTER TO THE PRESENT DIRPATH_NEXT DW ? ;ADDRESS OF NEXT FILEPATH_END DW ? ;END OF PATHBUFFPATH_BUFF DB 0a000H DUP ("$")FIND_NAME DB 127,0,"XZX.TXT",0,0,111 DUP("$"),0dh,0ah,"$"FINDING_PATH DB 128 DUP (?) ;FILE OF THE FOUNDMYDTA DB 128 DUP(0),0DH,0AH,"$" ;SET DATA TRANSFER AREADIR DB 127,0,"G:X",126 DUP("$"),0DH,0AH,"$" ;DIR OF SEARCHFOUNDPATH_END DW ? ;POINTER OF THE END OF FOUND_PATHFOUND_PATH DB 0AH,0DH,100H DUP("$") ;PATH BUFFER OF THE FILES FOUNDDIRFLAG DB ?DATASEG ENDSCODESEG SEGMENTMAIN PROC FARASSUME CS:CODESEG,DS:DATASEG,ES:DATASEGSTART: MOV AX,DATASEG MOV DS,AX MOV ES,AX ;;SET NEW DTA MOV DX,OFFSET MYDTA MOV AH,1AH INT 21H CALL INPUTN CALL SCAN_DIR CALL CRLF CALL CRLF MOV DX,OFFSET FOUND_PATH MOV AH,9H INT 21H CALL CRLF MOV SI,OFFSET SUMFILEN MOV BX,SUMNUM CALL BINIDEC CALL CRLF MOV SI,OFFSET FOUNDFILEN MOV BX,FOUNDNUM CALL BINIDEC CALL SAVE_PATH ;save the found path to file MOV AH,01H INT 21H MOV AX,4C00H INT 21HMAIN ENDPINPUTN PROC NEAR MOV DX,OFFSET MSGDIR MOV AH,9h INT 21H MOV DX,OFFSET DIR MOV AH,10 INT 21H MOV DX,OFFSET MSGFILENAM MOV AH,9h INT 21H MOV DX,OFFSET FIND_NAME MOV AH,10 INT 21h MOV BL,FIND_NAME+1 ;MAKE END OF THE NAME IS 0 XOR BH,BH MOV FIND_NAME[BX+2],0 RETINPUTN ENDPSCAN_DIR PROC NEAR MOV AX,OFFSET FOUND_PATH MOV FOUNDPATH_END,AX MOV AX,OFFSET PATH_BUFF MOV PATH_NEXT,AX ;MOV PATH_PRS,AX MOV PATH_END,AX CALL MPHASE_DIR ;PREPROCESS OF THE DIR(C:)SC_LOP: MOV DX,PATH_NEXT MOV CX,37H MOV AH,4EH INT 21H JC SC_RE ;*.*IN THIS MODEL FIRST IS PRESENT DIR NEXT: MOV CX,37H MOV AH,4FH INT 21H JC SC_RE INC SUMNUM ;SUM OF FILE INCREASE ONE CALL DISPLAY_PATH ;DILAY THE PATH CALL FILEPROC ;PROCESS OF THE PRESENT FILE:FIRST CHECK IF IT IS THE GOAL NEXT CHECK IF IT IS DIR JMP NEXTSC_RE: MOV SI,PATH_NEXT CMP SI,PATH_END ;PATH_BUFF IS EMPTY? JE SC_RET MOV SI,PATH_NEXT ;FIND THE NEXT DIR CLDSC_NEXT_LOP: LODSB CMP AL,0 JNE SC_NEXT_LOP MOV PATH_NEXT,SI JMP SC_LOPSC_RET: RETSCAN_DIR ENDPMPHASE_DIR PROC NEAR MOV SI,OFFSET DIR MOV DI,path_NEXT add si,2 cld LODSW ;ASSUME PATH IS LIKE D: STOSW; LODSW; STOSW MOV AX,"*" STOSW MOV AX,"*." STOSW MOV AL,0 STOSB mov al,"$" stosb dec di MOV PATH_END,DI RETMPHASE_DIR ENDP;IF DIR IS THE PRESENT DIR OF FATHER DIR ,NOT DISPLAYDISPLAY_PATH PROC NEAR; mov the path_prs to FINDING_PATH and display CALL CHECK_IS_LEGAL_DIR CMP AX,1 JNE DISP_END MOV SI,PATH_NEXT MOV DI,OFFSET FINDING_PATH cldDISP_LOP: LODSB STOSB CMP AL,"" JNE DISP_LOP lodsb stosb CMP AL,"*" JNE DISP_LOP MOV SI,OFFSET MYDTA ADD SI,1EH dec di ;more a "*" CLDDISP_LOP2: LODSB STOSB CMP AL,"." JNE DISP_N STOSB LODSB CMP AL,"." JE DISP_ENDDISP_N: CMP AL,0 JNE DISP_LOP2 mov al,"$" stosb CALL CRLF MOV DX,OFFSET FINDING_PATH MOV AH,9 INT 21HDISP_END: RETDISPLAY_PATH ENDP;ENTRY MYDTA[1E]:THE NAME OF THE PRESENT FILE NAMEFILEPROC PROC NEAR CALL CHECK_FIND ;FIND IT ? MOV BP,OFFSET MYDTA ADD BP,15H XOR AX,AX MOV AL,[BP] TEST AL,10H ;IS DIR? JZ FP_END ;NOT A DIR,DON"T PROCESS AND QUIT CALL CHECK_IS_LEGAL_DIR CMP AX,1 JNE FP_END ;NOT A FATHER DIR MOV SI,OFFSET FINDING_PATH MOV DI,PATH_END CLDFP_LOP1: LODSB CMP AL,0 JE FP_RET STOSB JMP FP_LOP1FP_RET: MOV AX,"*" STOSW MOV AX,"*." STOSW MOV AL,0 STOSB MOV PATH_END,DI ;RESET END OF BUFFFP_END: RETFILEPROC ENDP;CHECK WEATHER DIR IS FATHER OR PRESENT DIR;OUT:AX:1 LEGAL; AX:0 ILEGALCHECK_IS_LEGAL_DIR PROC NEAR CMP BYTE PTR MYDTA[1eH],"." JZ CHECK_FATHEND CMP BYTE PTR MYDTA[1eH],0 JZ CHECK_FATHEND MOV AX,1 JMP CHECK_LEGAL_RETUCHECK_FATHEND: MOV AX,0 CHECK_LEGAL_RETU: RETCHECK_IS_LEGAL_DIR ENDP;FIND_FILE:THE FILE TO SEARCH;IF=,THEN FOUNDNUM+1CHECK_FIND PROC NEAR ;USE SI MOV BX,OFFSET MYDTA ADD BX,1DH MOV SI,OFFSET FIND_NAME cld ADD SI,2CHF_LOP: LODSB INC BX CMP AL,[BX] JNE CHF_RET CMP AL,0 JNE CHF_LOP CALL FINDITCHF_RET: RETCHECK_FIND ENDP;IF FOUND;STORE THE PRESENT PATH TO FOUNDPATH;FOUNDNUM++FINDIT PROC NEAR INC FOUNDNUM ;FOUND FILE NUM +1 MOV SI,OFFSET FINDING_PATH MOV DI,FOUNDPATH_ENDFINDIT_LOP1: cld LODSB STOSB CMP AL,0 JE FINDIT_RET JMP FINDIT_LOP1FINDIT_RET: MOV AL,0DH ;STORE CRLF TO FOUND_PATH STOSB MOV AL,0AH STOSB MOV AL,"$" ;MAKE SURE END IS "$" STOSB MOV AX,DI DEC AX MOV FOUNDPATH_END,AX RETFINDIT ENDPSAVE_PATH PROC NEAR MOV AH,3CH MOV CX,20H ;ATTRIB GUIDANG MOV DX,OFFSET RESULT INT 21H JC SP_CREATE_ERR MOV BX,AX MOV AX,3E00H INT 21H ;CLOSE THE FILE MOV AX,3D02H MOV DX,OFFSET RESULT INT 21H ;OPEN WITH READ ATTRIB JC SP_OPEN_ERR MOV BX,AX MOV AX,4000H MOV SI,OFFSET FOUND_PATH ;SUM OF CHARS MOV DI,FOUNDPATH_END SUB DI,SI MOV CX,DI MOV CX,DI MOV DX,OFFSET FOUND_PATH INT 21H CMP AX,DI JNE SP_WRITE_ERR MOV AX,4000H MOV CX,15H MOV DX,OFFSET SUMFILE INT 21H CMP AX,15H JNE SP_WRITE_ERR MOV AX,4000H MOV CX,6H MOV DX,OFFSET SUMFILEN INT 21H CMP AX,6H JNE SP_WRITE_ERR MOV AX,4000H MOV CX,14H MOV DX,OFFSET FOUNDFILE INT 21H CMP AX,14H JC SP_WRITE_ERR MOV AX,4000H MOV CX,6 MOV DX,OFFSET FOUNDFILEN INT 21H CMP AX,6H JC SP_WRITE_ERR MOV AX,3E00H INT 21HEXIT: RETSP_CREATE_ERR: MOV DX,OFFSET SP_CRE_ERR JMP SP_SHOWERRSP_OPEN_ERR: MOV DX,OFFSET SP_OPE_ERR JMP SP_SHOWERRSP_WRITE_ERR: MOV DX,OFFSET SP_WRI_ERR JMP SP_SHOWERRSP_SHOWERR: MOV AX,900H INT 21H JMP EXITSAVE_PATH ENDPBINIDEC PROC NEAR;SUBROUTINE TO CONVERT BINARY NUMBER IN BX;TO DECIMAL ON CONSOLE SCREEN MOV CX,10000D CALL DEC_DIV MOV [SI],DL MOV CX,1000D CALL DEC_DIV MOV [SI+1],DL MOV CX,100D CALL DEC_DIV MOV [SI+2],DL MOV CX,10D CALL DEC_DIV MOV [SI+3],DL MOV CX,1D CALL DEC_DIV MOV [SI+4],DL RETBINIDEC ENDPDEC_DIV PROC NEAR;SUBROUTINE TO divideNUMBER IN BX BY NUMBER IN CX;PRINT QUOTIENT ON SCREEN;(NUMBERATOR IN DX+AX,DENOM IN CX) MOV AX,BX MOV DX,0 DIV CX MOV BX,DX MOV DL,AL ADD DL,30H MOV AH,2H INT 21H RETDEC_DIV ENDPCRLF PROC NEAR MOV DL,0DH MOV AH,2 INT 21H MOV DL,0AH MOV AH,02H INT 21H RETCRLF ENDPCODESEG ENDS END START磁盘扫描程序

AREA | Header Code |,CODE,请问一下这段汇编语言是什么意思?真心地不懂

AREA | Header Code |,CODEAREA 用于定义一个代码段或数据段,AREA伪操作指示汇编器汇编新的代码段或数据段 |Header Code | 是将要制定的段名,可以选择任何符合规范的名字比如ABC _CODAAREA 等,CODE 逗号分隔的节属性,CODE是关键字,制定该段为代码段还可以是以下 节属性READONLY 制定该段不可写DATA 定义数据段

MCS-51单片机汇编语言中func是什么

不硌这个func用在哪里?贴上有关func的代码

goto语句的汇编语言

goto语句与汇编语言里面的jmp指令相同,(无条件转移)1+2+3........+8+9+10NASM描述:mov ax,1mov bx,0start:add bx,axinc axcmp ax,11;比较指令jzend ;零转移jmp startend:;;start: end:是标号

汇编语言中interrupt 是怎么翻译的?

中断。

汇编语言中什么是立即数

mov ax,88就是立即数

用汇编语言编写计算器

哥呀!这……不要人命啊!用汇编?

求助:一道简单的汇编语言程序设计

路过,看了看---两个字```不会!因为我也正在学,不好意思哦!

汇编语言。循环与分支程序设计。高手们进来帮下忙吧~ 谢啦~

题呢?

单片机汇编语言中 CY AC OV 分别是什么意思?

CY 应该是进位OV应该是溢出AC 不知道,交流电?

汇编语言inc啥意思?

inc(a) 就相当与 a:=a+1 即在本次循环是累加。

汇编语言问题

SP=1FFEHDH=1FFFHDL=1FFEHAX=00F0HDI=1234HDX=0ACF0HCF=0ZF=0

有汇编语言写程序,查找在内部RAM的30H~40H单元中是否有“$”,如果有则将标志位FOH置1;否则清零

ORG 0000H MOV R7,#10H MOV R0,#30H CLR F0LOOP: MOV A,@R0 CJNE A,#36,LOOP1;$的ASCII码为36 SETB F0LOOP1:INC R0 DJNZ R7,LOOP SJMP $ END

汇编语言中JBJA是什么意思

汇编语言中JB、JA都是条件转移指令,常用于比较两个无符号数的大小,判断条件是CF、ZF状态的组合。为确定CF、ZF状态,转移前用CMP指令设置标志位。具体解释如下: 1、指令JA表示:CF等于0且ZF等于0,即A大于B转移。 2、指令JB表示:CF等于1 且ZF等于0,即A小于B转移。

汇编语言中JBJA是什么意思

  汇编语言中JB、JA都是条件转移指令,常用于比较两个无符号数的大小,判断条件是CF、ZF状态的组合。为确定CF、ZF状态,转移前用CMP指令设置标志位。具体解释如下:   1、指令JA表示:CF等于0且ZF等于0,即A大于B转移。   2、指令JB表示:CF等于1 且ZF等于0,即A小于B转移。

汇编语言为什么要设计je jz 2种功能重复的指令,他们对应的机器码一样吗?

机器语言,难以理解,编程不便。用“助记符”来代表机器语言,就方便了。je、jz,这是微软所确定的助记符。MASM.EXE 是微软推出的编译软件。当年,比尔·盖茨还很年轻,雇佣的程序员,都比他大。编写 MASM.EXE 时,几个码农,互相不服。这个说用 JZ、那个说用 JE。比尔·盖茨不敢说不,就和稀泥:两个都用吧。同样,还有下面两条:  LEA BX,标号  MOV BX,OFFSET 标号它们的机器码,也是相同的。

51单片机汇编语言。求两个数的平方和。

PFH: MOV A, 30H MOV B, A MUL AB MOV 40H, A MOV 41H, B MOV A, 31H MOV B, A MUL AB ADD A, 40H MOV 40H, A MOV A, B ADDC A, 41H MOV 41H, A CLR A ADDC A, #0 MOV 42H, ARET

求单片机汇编语言程序解释

这是一段时间显示及调整程序,全解释也太累了,您具体问哪一句?

汇编语言程序设计方法_汇编语言程序设计教程

编码不容易,望能帮到楼主。楼主好好看CRLFMACRO;宏定义,实现回车换行MOVAH,2MOVDL,0DHINT21HMOVAH,2MOVDL,0AHINT21HENDMDSEGMENTSCOREDB76,69,84,90,73,88,89,63,100,80;数组接收分数SDB5DUP(?);预留5个位置存储每个分数段的人数WORDSDB"THENUMBERBETWEEN60~69IS:$"WORDS1DB"THENUMBERBETWEEN70~79IS:$"WORDS2DB"THENUMBERBETWEEN80~89IS:$"WORDS3DB"THENUMBERBETWEEN90~99IS:$"WORDS4DB"THENUMBERBETWEEN100IS:$"DENDSCODESEGMENTASSUMECS:CODE,DS:DBG:MOVAX,DMOVDS,AXCALLCOUNT;调用子程序MOVAH,9;输出每个分数段的人数LEADX,WORDSINT21HMOVAH,2MOVDL,SADDDL,30HINT21HCRLFMOVAH,9LEADX,WORDS1INT21HMOVAH,2MOVDL,S1ADDDL,30HINT21HCRLFMOVAH,9LEADX,WORDS2INT21HMOVAH,2MOVDL,S2ADDDL,30HINT21HCRLFMOVAH,9LEADX,WORDS3INT21HMOVAH,2MOVDL,S3ADDDL,30HINT21HCRLFMOVAH,9LEADX,WORDS4INT21HMOVAH,2MOVDL,S4ADDDL,30HINT21HCRLFMOVAH,4CHINT21HCOUNT:;子程序入口MOVCX,10;循环10次MOVSI,0LOP:INT3MOVAL,SCORE[SI]CMPAL,70JBNUMBER6;比较进入不同的标号进行计算每个分数段人数CMPAL,80JBNUMBER7CMPAL,90JBNUMBER8CMPAL,100JENUMBER10JMPNUMBER9NUMBER6:;不同标号之下的作用是计算每个分数段人数并存于预留的位置中MOVBL,SINCBLMOVS,BLJMPLNUMBER7:MOVBL,S1INCBLMOVS1,BLJMPLNUMBER8:MOVBL,S2INCBLMOVS2,BLJMPLNUMBER9:MOVBL,S3INCBLMOVS3,BLJMPLNUMBER10:MOVBL,S4INCBLMOVS4,BLJMPLL:INCSILOOPLOPRET;子程序结束,放回主程序CODEENDSENDBG

汇编语言中LABEL伪指令的功能?

LABEL 一般用作定义变量和标号的属性,它是与紧接着的下一条变量和标号定义语句相关的,其类型可以为BYTE、WORD、DWORD、QWORD、NEAR、FAR等等。用法为:buffer(变量) LABEL BYTE(类型)例如:Buffer1 LABEL WORDBuffer2 DB 20 DUP (?)通常,紧接着的下一条语句定义的类型与LABEL指定的类型不同。而实际上,Buffer1是Buffer2的别名,两者指向内存中的同一个存储地址。换言之,同一组数据定义了两种不同的类型,在接受不同数据类型的访问时,可以指定相应的标号。如接受一个字类型数据访问时,使用Buffer1;接受字节类型数据访问时,使用Buffer2。否则因为数据类型不匹配,编译器编译时将出现异常。说到LABEL,也不得不提到另一个与之功能相近的伪指令THIS。THIS通常也与它的下一条变量定义语句相关,因为在数据类型过多的情况下接受不同数据类型访问时,使用PTR属性限定符显得十分繁琐,比如起初定义了变量:Buffer1 EQU THIS WORDBuffer2 DB 20 DUP (0) 假设有如下语句:mov AX, Buffer1mov AX, Buffer2 其中,在作字类型访问时,mov AX, Buffer1相当于mov AX, WORD PTR Buffer2,这样省去了繁琐的PTR操作符。以上两条语句在内存中的安排: |...... ......01h ...... ......| 02h | | | |...... ...... ...... ......| | (Buffer1、Buffer2首地址)Buffer1指向的数据为0201hBuffer2指向的数据为01h

汇编语言编程

VARDW2278H,2DUP(?),"ABCD"

汇编语言编译时提示out of range错误

你用的可能是用proetus汇编的。改用UV2汇编

汇编语言中 LOAD与STORE有什么区别?

LODS (Load string)串装入指令:将数据从内存指定位置装入CPU中的累加器指令格式有3种: LODS OPRD ;OPRD为源串 LODSB LODSWLODS指令把由DS:SI指向的源串中的字节或字取到累加器AL或AX中,并在这之后根据DF的值自动修改指针SI,以指向下一个要装入的字节或字。STOS (Store string)串存储指令:将CPU中的累加器中的数据装到内存中指定位置指令格式有3种: STOS OPRD ;OPRD为目标串 STOSB STOSWSTOS指令把累加器AL中的字节或AX中的字存到由ES:DI指向的存储器单元中,并在这之后根据DF的值自动修改指针DI的值(增量或减量),以指向下一个存储单元。利用重复前缀REP,可对连续的存储单元存入相同的值

小白求教,汇编语言的PTR运算符

ptr 是内存单元大小的前缀说明符,要以byte、word、dword、near、 far 等作为前缀使用。如:mov byte ptr [si], 12mov word ptr [si], 1234mov dword ptr [si],1234567jmp near ptr @1jmp far ptr @2

小白求教,汇编语言的PTR运算符

data segment dword "data"arr db 100 dup(?)data endsstack segment para stack dw 200 dup(?)top dw $stack endscode segment word "code" assume cs:code,ss:stack,ds:data,es:data org 100hstart:mov ax,seg stack mov ss,ax mov sp,top mov ax,seg data mov ds,ax mov es,ax mov cx,100 mov di,0 mov al,64h cld rep stosb mov ah,4ch int 21hcode ends end start它是一种面向对象的脚本语言,与 Smalltalk 非常接近,但增加了数组编程的特性。

汇编语言中ptr的作用是什么

在没有寄存器名存在的情况下,用操作符“Xptr”指明内存单元的长度,X在汇编指令中可以为word或者byte。例如:movwordptrds:[0],1incwordptr[bx]movebyteptrds:[0],1incbyteptr[bx]在没有寄存器参与的内存单元访问指令中,必须要显性地告诉CPU所要访问的单元是字单元,还是字节单元。ps:参考王爽【汇编语言】第二版

汇编语言:PTR 和LABEL 的不同?详解!

8086CPU的指令,可以处理两种尺寸的数据,byte和word。所以在机器指令中要指明,指令进行的是字操作还是字节操作。对于这个问题,汇编语言中用以下方法处理。   (1)通过寄存器名指明要处理的数据的尺寸。例如:下面的指令中,寄存器指明了指令进行的是字操作:   mov ax,1   mov bx,ds:[0]   mov ds,ax   mov ds:[0],ax   inc ax   add ax,1000   下面的指令中,寄存器指明了指令进行的是字节操作:   mov al,1   mov al,bl   mov al,ds:[0]   mov ds:[0],al   inc al   add al,100   (2)在没有寄存器名存在的情况下,用操作符 X ptr指明内存单元的长度,X在汇编指令中可以为word或byte。例如:下面的指令中,用word ptr指明了指令访问的内存单元是一个字单元:   mov word ptrds:[0],1   inc word ptr[bx]   inc word ptrds:[0]   add word ptr[bx],2   下面的指令中,用byte ptr指明了指令访问的内存单元是一个字节单元:   mov byte ptr ds:[0],1   inc byte ptr [bx]   inc byte ptr ds:[0]   add byte ptr [bx],2   在没有寄存器参与的内存单元访问指令中,用word prt 或byte ptr显性地指明所要访问的内存单元的长度是很必要的。否则,CPU无法得知所要访问的单元,还是字节单元。假如我们用Debug查看内存的结果如下:   2000:1000 FF FF FF FF FF FF ......   那么指令:   mov ax,2000H   mov ds,ax   mov byte ptr[1000H],1   将使内存中的内容变为:   2000: 1000 01 FF FF FF FF FF ......   而指令:   mov ax,2000H   mov ds,ax   mov word ptr[1000H],1   将使内存中的内容变为:   2000:1000 01 00 FF FF FF FF ......   这是因为 mov byte ptr[1000H],1访问的是地址为 ds:1000H 的字节单元,修改的是ds:1000H 单元的内容;而mov word ptr[1000H],1 访问的是地址为 ds:1000H 的字单元,修改的是 ds:1000H 和 ds:1001H 两个单元的内容。   (3) 其他方法 有些指令默认了访问的是字单元还是字节单元,比如:push [1000H] 就不用指明访问的是字单元还是字节单元,因为push指令只进行字操作。建立磁盘卷标命令  功能:建立、更改、删除磁盘卷标。   格式:LABEL[盘符:][卷标名]   使用说明:卷标名为要建立的卷标名,若缺省此参数,则系统提示键入卷标名或询问是否删除原有的卷标名;卷标名由1至11个字符组成。[1]

汇编语言中ptr的作用是什么

BYTE PTR ... ... 8 位、WORD PTR ... ... 16 位、DWORD PTR ... ... 32 位。这些,是用来描述“存储器操作数”的位数。

汇编语言里PTR什么意思? C++里面又是什么意思?

ptr--pointer(指针)缩写。汇编里面ptr是规定的字(保留字)。movax,bx;是把BX寄存器“里”的值赋予AX,由于二者都是word型,不用wordmovax,wordptr[bx];是把内存地址等于“BX寄存器的值”的地方所存放的数据,赋予ax。由于只是给出一个内存地址,不知道希望赋予ax的,是byte还是word,所以需要用word明确指出!c语言里ptr是程序员自己写的变量名字,不是保留字。当然,它可以是指针。例如:floata[5];float*ptr;ptr=&a[0];

汇编语言中ptr的作用是什么

强制指定某种类型

关于汇编语言中的LOOP指令

是循环指令,循环次数由计数寄存器CX指定。是否执行循环体的判断指令在循环体之后,所以,至少执行1次循环体,即至少循环1次。执行LOOP指令时,CPU自动将CX的值减1直到CX为0,循环结束

汇编语言loop语句

在汇编语言中,LOOP是循环指令,固定以CX控制循环次数,简化循环程序设计。该指令书写格式:LOOPOPR(OPR是程序中的目标地址标号)该指令执行步骤:(CX)←(CX)u22121;若(CX)≠0,则循环到标号处执行,否则顺序执行。程序在使用LOOP指令之前应先将循环次数送入CX中。例如:MOVCX,10;设置循环次数MOVAX,1OPR1:SHLAX,1LOOPOPR1

汇编语言中loop指令的含义

这不就是循环符么

汇编语言的loop指令

呵呵

关于汇编语言中的LOOP指令

先执行L5标号内容,然后遇到loop会使cx-1,很明显,原来为0,再减1会成为-1即补码ffff,然后再继续fffe,fffd.....一直到零,才停止执行。所以标号L5一共执行了65536次。可以用如下简单程序测试mov cx,0 lop1:mov dl 41h mov ah,02h int21h loop lop1会输出65536个一长串A而不是有人回答的一次。复制粘贴害人!不会就不要回答嘛

关于汇编语言中的LOOP指令

这个程序循环一次,是由CX存放的。 cx中存放的是循环的次数 编程计算2^12: assume cs:code code segment mov ax,2 mov cx,11 s:add ax,ax loop s mov ax,4c00h int 21h code ends end 执行loop s时,首先要将(cx)减1,若(cx)不为0,则前往s处执行add ax,ax。 CPU执行LOOP指令的时候,要进行两步操作: 1 (cx)=(cx)-1 2 判断cx中的值,不为零则转移到标号处执行程序,如果为零,则向下执行 例1 计算2^2 结果放在AX CODE SEGMENT ASSUME CS:CODE MOV AX,2 ADD AX,AX MOV AX,4C00H INT 21H code ENDS END 例2 计算2^3 结果放在AX CODE SEGMENT ASSUME CS:CODE MOV AX,2 ADD AX,AX ADD AX,AX MOV AX,4C00H INT 21H code ENDS END 扩展资料: 注意: 计算ffff:0-ffff:b单元中的数据之和,结果存储在dx中。 运算后的结果会不会查过dx所可以承受的存储范围。 ffff:0-ffff:b是字节型数据,范围在0-255,12个这样的数,即使都是255相加也不会超过65535 不可以直接将数据累加在dx中。 因为ffff:0-ffff:b是字节型数据8位,dx中存放16位数据。 不可以直接将数据累加到dl中,因为dl是8位寄存器,所容纳的数据的范围在0-255之间,ffff:0-ffff:b中的数据也都是8位,若仅向dl累加12个8位数据,可能会引起进位丢失的这种情况。

单片机汇编语言中比较指令

刚好也有这么个困惑,已经解决了,拿出来分享下比较转移指令CJNZCJNEA,#data,relCJNEA,direct,relCJNERn,#data,relCJNE@Ri,#data,rel第一条指令的功能是将A中的值和立即数data比较,如果两者相等,就次序执行(执行本指令的下一条指令),如果不相等,就转移,同样地,我们能将rel理解成标号,即:CJNEA,#data,标号。这样利用这条指令,我们就能判断两数是否相等,这在很多场合是非常有用的。但有时还想得知两数比较之后哪个大,哪个小,本条指令也具有这样的功能,如果两数不相等,则CPU还会反映出哪个数大,哪个数小,这是用CY(进位位)来实现的。如果前面的数(A中的)大,则CY=0,不然CY=1,因此在程序转移后再次利用CY就可判断出A中的数比data大还是小了。例:MOVA,R0CJNEA,#10H,L1MOVR1,#0FFHAJMPL3L1:JCL2MOVR1,#0AAHAJMPL3L2:MOVR1,#0FFHL3:SJMPL3JC是判CY是0,还是1进行转移,如果CY=1,则转移到JC后面的标号处执行,如果CY=0则次序执行(执行它的下面一条指令)。分析一下上面的程序,如果(A)=10H,则次序执行,即R1=0。如果(A)不等于10H,则转到L1处继续执行,在L1处,再次进行判断,如果(A)>10H,则CY=1,将次序执行,即执行MOVR1,#0AAH指令,而如果(A)<10H,则将转移到L2处指行,即执行MOVR1,#0FFH指令。因此最终结果是:本程序执行前,如果(R0)=10H,则(R1)=00H,如果(R0)>10H,则(R1)=0AAH,如果(R0)<10H,则(R1)=0FFH。弄懂了这条指令,其它的几条就类似了,第二条是把A当中的值和直接地址中的值比较,第三条则是将直接地址中的值和立即数比较,第四条是将间址寻址得到的数和立即数比较,这里就不详谈了,下面给出几个对应的例程。CJNEA,10H;把A中的值和10H中的值比较(注意和上题的区别)CJNE10H,#35H;把10H中的值和35H中的值比较CJNE@R0,#35H;把R0中的值作为地址,从此地址中取数并和35H比较

单片机汇编语言中比较指令

刚好也有这么个困惑,已经解决了,拿出来分享下比较转移指令CJNZCJNEA,#data,relCJNEA,direct,relCJNERn,#data,relCJNE@Ri,#data,rel第一条指令的功能是将A中的值和立即数data比较,如果两者相等,就次序执行(执行本指令的下一条指令),如果不相等,就转移,同样地,我们能将rel理解成标号,即:CJNEA,#data,标号。这样利用这条指令,我们就能判断两数是否相等,这在很多场合是非常有用的。但有时还想得知两数比较之后哪个大,哪个小,本条指令也具有这样的功能,如果两数不相等,则CPU还会反映出哪个数大,哪个数小,这是用CY(进位位)来实现的。如果前面的数(A中的)大,则CY=0,不然CY=1,因此在程序转移后再次利用CY就可判断出A中的数比data大还是小了。例:MOVA,R0CJNEA,#10H,L1MOVR1,#0FFHAJMPL3L1:JCL2MOVR1,#0AAHAJMPL3L2:MOVR1,#0FFHL3:SJMPL3JC是判CY是0,还是1进行转移,如果CY=1,则转移到JC后面的标号处执行,如果CY=0则次序执行(执行它的下面一条指令)。分析一下上面的程序,如果(A)=10H,则次序执行,即R1=0。如果(A)不等于10H,则转到L1处继续执行,在L1处,再次进行判断,如果(A)>10H,则CY=1,将次序执行,即执行MOVR1,#0AAH指令,而如果(A)<10H,则将转移到L2处指行,即执行MOVR1,#0FFH指令。因此最终结果是:本程序执行前,如果(R0)=10H,则(R1)=00H,如果(R0)>10H,则(R1)=0AAH,如果(R0)<10H,则(R1)=0FFH。弄懂了这条指令,其它的几条就类似了,第二条是把A当中的值和直接地址中的值比较,第三条则是将直接地址中的值和立即数比较,第四条是将间址寻址得到的数和立即数比较,这里就不详谈了,下面给出几个对应的例程。CJNEA,10H;把A中的值和10H中的值比较(注意和上题的区别)CJNE10H,#35H;把10H中的值和35H中的值比较CJNE@R0,#35H;把R0中的值作为地址,从此地址中取数并和35H比较

运用汇编语言编写两段方波和三角波的程序

这要结合具体的电路,比如12MHz主频的8031与DAC0832构成的单缓冲连接及双极性输出电路。1、三角波输出程序START:MOVDPTR,#7FFFH;向DAC0832输出的地址(取决于你电路中地址线的连接方式)DA:MOVR0,#80H;输出初始值入R0(从0伏开始输出),兼做输出计数控制UP:MOVA,R0;输出值入AMOVX@DPTR,A;正向增长,DA转换输出INCR0;输出值加1NOP;延时1微秒NOP;延时1微秒CJNER0,#0FFH,UP;输出未到5伏则转UP,继续正向增长DOWN:DECR0;输出值减1MOVA,R0;输出值入AMOVX@DPTR,A;反向减小,DA转换输出NOP;延时1微秒NOP;延时1微秒CJNER0,#80H,DOWN;输出未到0伏则转DOWN,继续反向减小AJMPDA;一个周期结束进入下一个周期注:此程序输出的三角波频率不是很精确的500HZ,但相差也不大,2、方波输出程序START:MOVDPTR,#7FFFH;向DAC0832输出的地址(取决于你电路中地址线的连接方式)DA:MOVR0,#80H;输出初始值入R0(从0伏开始输出),兼做输出计数控制UP:MOVA,#80H;0伏输出值入AMOVX@DPTR,A;0伏DA转换输出INCR0;输出计数加1NOP;延时1微秒NOP;延时1微秒CJNER0,#0FFH,UP;未到半个周期则转UP,继续0伏输出DOWN:DECR0;输出计数减1MOVA,#0FFH;5伏输出值入AMOVX@DPTR,A;5伏DA转换输出NOP;延时1微秒NOP;延时1微秒CJNER0,#80H,DOWN;输出未到0伏则转DOWN,继续反向减小AJMPDA;一个周期结束进入下一个周期注:同样,此程序输出的方波频率不是很精确的500HZ

用汇编语言编写的程序,有十个按键,排序是1~10,有四个数码管,要求每按一个按键在数码管显示出来。

KEYCARDBIT00H;用于标志是否有键按下KEYCOUEQU5AH;用于记录按下键的次数ORG0000H;程序开始AJMPSTARTORG30H;为避免占用中断向量区,主程序从30H开始START:MOVSP,#5FH;设置堆栈的初始地址MOVP2,#0H;P2,P3的初始化MOVP3,#0FFHCLRKEYCARD;有按键标志清0MOVKEYCOU,#0;计数初值赋0LOOP:;循环扫描键盘ACALLKEY_CHECKJNBKEYCARD,DISPLAYINCKEYCOUDISPLAY:;显示程序MOVDPTR,#ASCII;获得对应的显示码PUSHBMOVA,KEYCOUMOVB,#0AHDIVAB;选显示第一位高位MOVCA,@A+DPTRMOVP0,A;把显示码传至A口SETBP2.1;选通P2.0,显示ACALLDELAY1SCLRP2.1MOVA,BPOPBMOVCA,@A+DPTRMOVP0,A;把显示码传至A口SETBP2.0;选通P2.0,显示ACALLDELAY1SCLRP2.0AJMPLOOPKEY_CHECK:;看有没有键按下MOVA,P3ANLA,#0fFH;逻辑与CJNEA,#0FFH,KEY_CER;如果读入的与写出的不相等,延时消抖CLRKEYCARDRETKEY_CER:;延时,再读入,看是否真的有键按下ACALLDELAY1SMOVA,P3ANLA,#0FFHCJNEA,#0FFH,KEY_CECLRKEYCARDRETKEY_CE:MOVA,P3;直等到按键放下,则算作一次ANLA,#0FFHCJNEA,#0FFH,KEY_CESETBKEYCARD;真的有键按下,则置标志位RETDELAY1S:;延时函数MOVR7,#10D1:MOVR6,#50DJNZR6,$DJNZR7,D1RETASCII:DB0C0H,0F9H,0A4H,0B0H,099HDB092H,082H,0F8H,080H,090HDB088H,083H,0C6H,0A1H,086HDB08EH,08CH,0BFH,0FFHEND模仿下呵呵大家都没多少时间的

求一个51单片机汇编语言 串口输出一行中文的程序

ff

汇编语言的 位移指令

8种位移指令中只有:RCL和RCR影响CF,以RCL为例:MOVA,01HMOVCL,08HRCLA,CL则运行后CF为1.--------------------------------------------继续回答:不是"在RCL或RCR指令后,最高位放入CF";RCL是带进位左循环移位指令,RCR是带进位右循环移位指令;RCL是将某数最高位移进入CF,而CF里的内容跑到该数的最低位,形成咬尾蛇循环,移位次数为CL或CX指定的次数;而RCR相反,它是从最低位移出到CF,CF跑到最高位,形成咬尾蛇循环。这两个指令是9或17个位在参与移位操作,而其他移位指令只是8位或16位(以8086/8088指令为解释基础,不同的CPU机型移位指令的位数可能不同)

帮忙把这段C语言代码改写成汇编语言

无解,只能靠有经验的编程者来进行反向。正常情况下,也不会存在将汇编改写成c语言的需求。

怎么用51单片机4*4键盘实现简单计算器 就要加减就可以 汇编语言 麻烦可

KEYBUF EQU 40H ;键号存放单元 ORG 0000H LJMP MAIN ORG 0030HMAIN: MOV KEYBUF,#0 ;初始键号设位0,也可以为任意值 MOV R0,#30H ;显示首地址 MOV R2,#0CH ;计算数据存放单元个数 CLR AQING: MOV @R0,A ;将数据存放单元清零 INC R0 DJNZ R2,QING MOV P0,#8FH ;关闭显示 MOV R1,#30H ;将显示首地址存放R1里

单片机汇编语言1加到100怎么编?

请问是什么型号的单片机呢?

汇编语言单片机中断

主程序是:流水灯0到7依次点亮、流水灯7到0依次点亮,反复循环。外部中断程序是:灯全亮、全灭3次。但是,程序没有开中断的指令,中断程序是不会执行的。START: ;在下面添加: SETB EA ;开总中断. SETB EX0 ;开INT0中断. CLR IT0 ; 设置INT0为电平触发. MOV A,#00H……外部中断就可以实现了。

单片机课设之数显电子钟(汇编语言)

这么大的课题,又没银子,谁回答?

单片机利用汇编语言利用方式二制作秒表

已凉(韩偓)

电话拨号键LCD显示汇编语言

这个没分做,好像有点.....我这里有一个以前做的4*4键盘扫描,数码管显示的例程,供参考KEYVAL EQU 30HKEYTM EQU 31HKEYSCAN EQU 32HDAT EQU 33HDCNT EQU 37HT0L EQU 38HT0H EQU 39HSPEED EQU 3AHSCANLED EQU 3BHCHKCNT EQU 3CHDLYCNT EQU 3DHORG 0000HLJMP MAINORG 000BHLJMP T0ISRORG 0030HMAIN: MOV SP,#5FH MOV TMOD,#01H MOV T0L,#0F0H MOV T0H,#0D8H MOV TH0,#0D8H MOV TL0,#0F0H MOV KEYVAL,#0 MOV P2,#00H MOV DCNT,#0 MOV SCANLED,#0 MOV 33H,#10H MOV 34H,#10H MOV 35H,#10H MOV 36H,#10H MOV CHKCNT,#11H MOV SPEED,#100 MOV DLYCNT,#0 SETB EA SETB ET0 SETB TR0LOOP: LCALL KEYSEL MOV A,KEYVAL CJNE A,#0FFH,LOOP1 SJMP LOOPLOOP1: CJNE A,#10,LOOP2 ;“ON”启动LED测试 MOV DCNT,#0FFH SJMP LOOPLOOP2: CJNE A,#14,LOOP3 ;“-”速度快 MOV A,SPEED CLR C SUBB A,#10 MOV SPEED,A SJMP LOOPLOOP3: CJNE A,#15,LOOP4 ;“+”速度慢 MOV A,SPEED ADD A,#10 MOV SPEED,A SJMP LOOPLOOP4: CJNE A,#11,LOOP5 ;“=”停止测试,接受数字键 MOV 33H,#10H MOV 34H,#10H MOV 35H,#10H MOV 36H,#10H MOV DCNT,#0 SJMP LOOPLOOP5: CJNE A,#10,LOOP6 ;数字键LOOP6: JC LOOP7 LJMP LOOPLOOP7: MOV 33H,34H MOV 34H,35H MOV 35H,36H MOV 36H,KEYVAL LJMP LOOP;------------------KEYSEL: MOV KEYVAL,#0 MOV KEYSCAN,#0EFH LCALL GETKEY MOV A,KEYTM JZ KEYS1 MOV KEYVAL,A SJMP KEYRTNKEYS1: MOV KEYSCAN,#0DFH LCALL GETKEY MOV A,KEYTM JZ KEYS2 CLR C ADD A,#4 MOV KEYVAL,A SJMP KEYRTNKEYS2: MOV KEYSCAN,#0BFH LCALL GETKEY MOV A,KEYTM JZ KEYS3 CLR C ADD A,#8 MOV KEYVAL,A SJMP KEYRTNKEYS3: MOV KEYSCAN,#7FH LCALL GETKEY MOV A,KEYTM JZ KEYRTN CLR C ADD A,#12 MOV KEYVAL,AKEYRTN: LCALL CHGKEY RET;--------------------GETKEY: MOV KEYTM,#0 MOV A,KEYSCAN MOV P3,A NOP MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY MOV R2,#10 LCALL DELAY MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY MOV A,P3 ANL A,#0FH MOV R7,ASF: MOV A,P3 ANL A,#0FH XRL A,#0FH JNZ SF MOV A,R7 CJNE A,#0EH,NK1 MOV KEYTM,#1 SJMP NOKEYNK1: CJNE A,#0DH,NK2 MOV KEYTM,#2 SJMP NOKEYNK2: CJNE A,#0BH,NK3 MOV KEYTM,#3 SJMP NOKEYNK3: CJNE A,#07H,NOKEY MOV KEYTM,#4NOKEY: RET;--------------------DELAY: MOV R3,#50DELAY1: MOV R4,#100 DJNZ R4,$ DJNZ R3,DELAY1 DJNZ R2,DELAY RET;--------------------T0ISR: PUSH ACC CLR TR0 MOV TH0,T0H MOV TL0,T0L SETB TR0 MOV DPTR,#LEDTAB MOV A,DCNT ;段显示 JZ T000 MOV A,CHKCNT MOVC A,@A+DPTR MOV P2,#0FH CPL A MOV P0,A INC DLYCNT MOV A,DLYCNT CJNE A,SPEED,T021 MOV DLYCNT,#0 INC CHKCNT MOV A,CHKCNT CJNE A,#1AH,T020T020: JC T021 MOV CHKCNT,#11HT021: POP ACC RETIT000: ;数字显示 MOV R0,#DAT MOV A,SCANLED ADD A,R0 MOV R0,A MOV A,SCANLED JNZ T001 MOV P2,#01H SJMP T0DIST001: DEC A JNZ T002 MOV P2,#02H SJMP T0DIST002: DEC A JNZ T003 MOV P2,#04H SJMP T0DIST003: MOV P2,#08HT0DIS: MOV A,@R0 MOVC A,@A+DPTR CPL A MOV P0,A INC SCANLED MOV A,SCANLED ANL A,#03H MOV SCANLED,A POP ACC RETI;--------------------CHGKEY: MOV A,KEYVAL JZ KV16 DEC A JNZ KV01 MOV KEYVAL,#7 RETKV01: DEC A JNZ KV02 MOV KEYVAL,#4 RETKV02: DEC A JNZ KV03 MOV KEYVAL,#1 RETKV03: DEC A JNZ KV04 MOV KEYVAL,#10 RETKV04: DEC A JNZ KV05 MOV KEYVAL,#8 RETKV05: DEC A JNZ KV06 MOV KEYVAL,#5 RETKV06: DEC A JNZ KV07 MOV KEYVAL,#2 RETKV07: DEC A JNZ KV08 MOV KEYVAL,#0 RETKV08: DEC A JNZ KV09 MOV KEYVAL,#9 RETKV09: DEC A JNZ KV10 MOV KEYVAL,#6 RETKV10: DEC A JNZ KV11 MOV KEYVAL,#3 RETKV11: DEC A JNZ KV12 MOV KEYVAL,#11 RETKV12: DEC A JNZ KV13 MOV KEYVAL,#12 RETKV13: DEC A JNZ KV14 MOV KEYVAL,#13 RETKV14: DEC A JNZ KV15 MOV KEYVAL,#14 RETKV15: DEC A JNZ KV16 MOV KEYVAL,#15 RETKV16: MOV KEYVAL,#0FFH RET;--------------------LEDTAB: DB 0FCH ;"0" 00H DB 60H ;"1" 01H DB 0DAH ;"2" 02H DB 0F2H ;"3" 03H DB 66H ;"4" 04H DB 0B6H ;"5" 05H DB 0BEH ;"6" 06H DB 0E0H ;"7" 07H DB 0FEH ;"8" 08H DB 0F6H ;"9" 09H DB 0EEH ;"A" 0AH DB 3EH ;"B" 0BH DB 9CH ;"C" 0CH DB 7AH ;"D" 0DH DB 9EH ;"E" 0EH DB 8EH ;"F" 0FH DB 00H ;" " 10H DB 80H DB 40H DB 20H DB 10H DB 08H DB 04H DB 02H DB 01H DB 0FFH;--------------------END

单片机汇编语言8乘8点阵从上到下显示修改成从左到右显示

为什么要用汇编语言写

求高手解答下面汇编语言的错误之处!

MOV TH0,#(65536-50000) ; 高字节不应该 /256 MOV TL0,#(65536-50000)/256 ; 低字节才是应该 /256 另外在proteus软件的编译器 不支持以上格式,用 MedWin 编译器就可以。 当然也不支持 (MOV TL0,#(65536-50000)%256)这种格式

汇编语言中,mov a,#30H是什么意思

mova,#30h将16进制数30h送入a,结果a=30hmova,30h将地址为30h的寄存器内的数据送入a,结果a=由该寄存器内所存的实际数值决定。

汇编语言

看是不是相应的中断地址,并且有开,呵呵.

汇编语言中,MUL指令中源操作数为什么不能为立即数?

当初设计cpu时确定的,为什么这么定,只有设计者知道。你选了这种cpu,就只能服从它的规矩,你没有选择权的。

汇编语言中,MUL指令中源操作数为什么不能为立即数?

是一个语法规定,其实想想也知道,机器没办法确定你输入的这个立即数是按8位、16位还是32位处理,所以要对这个数进行操作,只能把立即数放在寄存器里让机器知道它的位数,再作计算

汇编语言问题 mul指令

  MUL AB  乘法指令的功能是将A和B中两个无符号8位二进制数相乘,所得的16位积的低8位存于A中,高8位存于B中。如果乘积大于256,即高位B不为0,则OV置1;否则OV清0,CY总是清0。  例如:设(A)=50H(80),(B)=0A0H(160)  若执行MUL AB,  则执行结果为:  乘积为3200H(12800),  (A)=00H,(B)=32H,(OV)=1,(CY)=0

请问这是汇编语言还是C语言

C语言........................

emeditor 怎么让汇编语言高亮显示

EmEditor 默认有个 x86 Assembler 配置。状态栏默认显示当前配置。(如图)你可以双击状态栏中显示配置的区域,在弹出的菜单中选择 x86 Assembler 。如果菜单中没有,你可以点击菜单中的[定义配置],(从模板中)新建一个。EmEditor 默认已将asm扩展名关联到了 x86 Assembler 配置,当你打开asm文件时,就用该配置呈现。将当前配置选为 x86 Assembler 后,你可以打开:工具 >> 当前配置属性调整该配置的各种属性,包括高亮显示。

在用DEBUG调试汇编语言程序时,用G命令,运到死循环如何退出

你好!回到visita系统,关掉cmd窗口。我的回答你还满意吗~~

汇编语言org指令怎么用??

比方 你写:org 0030h here: ..... ..... 则表示 从 here 开始的这段代码都放在 0030H的 内存区域;
 首页 上一页  1 2 3 4  下一页  尾页