用汇编语言程序编写:求最小值,最大值,和平均值
;设计数字处理程序DISPCMACROM;定义宏MOVDL,MMOVAH,2INT21HENDMDISSPMACROS显示单个字符;定义宏MOVAH,9LEADX,SINT21HEND显示字符串MDATASEGMENT;定义数据段S1D B'MAX= $'S2DB'MIN= $'DATAEND代码段假设:代码,DS:数据; 段描述 GO:MOVAX,DATAMOVDS,AX 填写段地址 L0:MOVCX; ,20; 设定长度LEASI,X; 将偏移地址传入 L2MOVMAX, ALL2:CMPMIN,ALJLEL3MOVMIN,ALL3:LOOPL1DISPSS1; 显示'MAX='CMPMAX,0JGL4DISPC'-'; 显示负号NEGMAX; L4值:MOVAL、MAXAAM; 创建(AH)=十位,(AL)=个位ORAX,3030H; 将数字转换为字符 PUSHAX; 将 DISPCAH 推入 POPAX 十位数字显示堆栈; 0DHDISPC0AH; 显示回车符和行 DISPSS2; 'MIN='CMPMIN,0JGL5DISPC'-'NEGMINL5:MOVAL,MINAMORAX,3030HPUSHAXDISPCAHPO PAXDISPCALDISPC0DHDISPC0AHDISPC8;退格 DISPC20H;空格 MOVAH,7;等待 INT21HMOVAH,4CH;退出 INT21HCODEENDSENDGO 最大值和最小值汇编语言十六进制转换成ASCII
代码部分假定为 CS:代码开始: PUSH CS DS POP DS ;在此处插入代码部分 MOV BX, 8421H ; MOV 十六进制数AH,2; 字符输出到标准输出设备MOV CX,16; 再次计时:MOV DL,'0'; 假设当前bx的最高位为0 ADD BX, BX ; bx=bx*2,即左移1位JNC DISP; 当进位标志未置位时(即bx的最高位为0时),切换到disp INC DL; 当进位标志置位时(即bx的最高位为1时)加1; 即变为“1”; DISP:INT再次循环21H MOV AH,4CH; 程序结束,INT 21H 代码结束、结束、开始
急求汇编语言问题!!!
;==================================================== ==========;从键盘输入9个十进制数字(数字之间用空格分隔); 然后输入序列号(1-9)并查看对应的编号。输入 0 结束。
;已满足上述要求。
;程序如下:;------------------------------------------ ------ -DISP_STRMACROX 宏定义。
MOVDX,OFFSETXMOVAH,9INT21HENDM;-------------------------------------------- - --------- --------DATASEGMENT;数据段.MSG1DB13,10,'请输入N$'MSG2DB13,10,'我可以没那么重要!$'MSG3DB13,10, '为了 favorInputNUM(1~9,0end):$'IN_N1DB9DUP(?,?,?,'$')NDB30H;ordinal.DATAENDS;------------ --------- -------------------------CODESEGMENT;代码段.ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS ,AXE;---- ----------------------MOVBX,OFFSETIN_N1;dataMOVCX,9;------------------------ - ------ -----------IN_X:PUSHCXMOVCX,3DISP_STRMSG1 宏调用,请求 PleaseInput:INCNNMOVDL,NMOVAH,2INT21HMOVDL,':'MOVAH,2INT21HMOVDX,BX;---- -- ------- ------ ----IN_LOOP:MOVAH,1;输入的字符。
INT21HCMPAL,'';空格?JZIN_Y;此数字结束。
CMPAL,30HJB_IN_ERR;小于'0',输入错误。
CMPAL,3AHJNB_IN_ERR ; 大于'9',输入错误。
MOV[BX],AINCBXMOVAX,BXSUBAX,2SUBAX,DXJAIN_YJMPIN_LOOP;继续输入。
;------------------------IN_Y : ADDIX ,4MOVBX,DXPOPCXLOOPIN_X;--------------------------------IN_END:DISP_STRMSG3;宏调用,请求NUMis:MOVAH , 1 ;插入字符。
INT2 1HCMPAL,30HJEEXIT; '0',结束.JB_IN_ERR; 小于‘0’,输入错误。
CMPAL,3AHJNB_IN_ERR 大于‘9’,输入错误。
PUSHAXMOVDL,13MOVAH,2INT21HM; OVDL,10MOVAH,2INT21HPOPAXSUBAL,31HMOVBL,4MULBLMOVDX,OFFSETIN_N1ADDDX,AXMOVAH,9INT21HJMPIN_END;--------------------------------_IN_ERR: DISP_STRMSG2; 宏调用,提示不能算那么多!EXIT:MOVAH,4CHINT21H;-------------------------------- ---------------代码ENDSENDSTART;==================================================程序运行时的画面如下: c:\masm510>Z2PleaseInputN1:342PleaseInputN2:45PleaseInputN3:25PleaseInputN4:21PleaseInputN5:566PleaseInputN6:32PleaseEnterN7:12PleaseEnterN8:563PleaseEnterN9:2PleaseEnterNUM(1~9,0end):325Please pleaseEnterNUM(1~9,0end):245PleaseEnter NUM(1~9,0end):1342PleaseInputNUM(1~9,0end):632PleaseInputNUM(1~9,0end):0c:\masm510>输入数据必须在100之间,输入他们手动。
汇编语言中ADD DISP[BX][DI],DX中的DISP是什么意思 什么作用
DISP 是变量名或数组名。代表内存地址。
DISP[BX][DI]是相对基址变址寻址方式,即该操作数的有效地址由地址DISP的值+BX寄存器的+SI寄存器的生成。