关于汇编原理的几个小问题~~ 你说的“断开”,大概指的是ES后面与SS之间还有一段空白吧?你图中最后那句“段与段可以不连续”,就是你说的“断开”。在程序运行中,CS,DS,ES,SS这4个段寄存器的值,相互之间没有联系,每一个都是可以独立取值的,因而可以出现“重叠”(甚至完全重合)和“断开”。它们并不需要一个接一个地连续排列。段寄存器中存放的,是“段地址”。16位的“段地址”,是20位的“段首地址”的高16位,20位中剩下的低4位是0000。也就是说,段的开始地址是十进制数16(十六进制数10H)的整数倍。“段地址”,规定了一个段的开始位置。一个段的大小,只是“最大”可以达到64KB(偏移地址从0000H~FFFFH),不是“始终”是独占64KB的固定大小。实际程序中,代码或数据一般不会不多不少正正好是64KB,很可能会小于64KB。为了充分使用内存,将程序装入内存后,并不是会给程序里的每一个逻辑段都分配一个完整的64KB段让它独占。而是需要多少就分配多少。剩下的要给别的段使用。在访问程序里的逻辑段中的数据时,偏移地址的取值范围是按逻辑段的实际大小处理的。举个例子:假设,程序中的一个数据段里只定义了256个字节(100H个字节)的变量空间。假设将这个逻辑段装入内存时的段地址是。
微机原理,用汇编语言,编写求两个数的最大公约数!!跪求!!! 用汇编语言编写程序,提示从键盘输入两个数,求这两个数的最大公约数。基于WIN32、MASM实现include io32.inc.datain_msg1 byte 'Enter a number:',0 in_msg2 byte 'Enter another number:',0 out_msg byte 'The common denominator is:',0.codestart:mov eax,offset in_msg1;提示输入第一个数据 call dispmsg call readsid;输入第一个数据 mov ebx,eax;保存到EBX mov eax,offset in_msg2;提示输入第二个数据 call dispmsg call readsid;输入第二个数据 mov ecx,eax;保存到ECXcall againmov eax,offset out_msg call dispmsg mov eax,ecx call dispsid jmp done;转移到结束again proccmp ebx,ecxjnl frontxchg ebx,ecx front:xor edx,edx mov eax,ebxdiv ecxcmp edx,0
用微机原理汇编从键盘上连续输入一串0~9的个位数,以回车结束,再按回车下一行显示输入数据中的最大值 ASSUME CS:CC,DS:QQQQ SEGMENTMSG1 DB 'Please input:',36MSG2 DB 13,10,'The MAX is:',36XX DB 81,?82 DUP?可输入80个字符QQ ENDSCC SEGMENTBEG:MOV AX,QQMOV DS,AXLEA DX,MSG1MOV AH,9INT 21HLEA DX,XXMOV AH,10;输入字符串INT 21HMOV CL,XX+1MOV CH,0JCXZ EXITMOV BL,0MOV SI,0LP1:CMP BL,XX[SI+2]JNC NEXTMOV BL,XX[SI+2]NEXT:INC SILOOP LP1LEA DX,MSG2MOV AH,9INT 21HMOV DL,BLMOV AH,2INT 21HEXIT:MOV AH,4CHINT 21HCC ENDSEND BEG