测试--经典程序汇编
汇编语言程序设计练习题及参考答案
一、单项选择题从每小题的四个备选答案中,选出一个正确答案,并将正确答案的番号填人括号内。
1.用来存放下一条将要执行的指令地址的寄存器是(B)A.SP B.IP C.BP D.CS2.要使串处理从低地址向高地址进行,应把标志位置为(D)A.IF=1B.TF=0C.DF=1D.DF=03.使状态标志位CF清零的错误指令是(C)A.OR AX,AX B.SUB AX,AXC.MOV CF,0D.CLC4.设SP=1110H,执行PUSH AX指令后,SP的内容为(B)A.SP=1112H B.SP=110EHC.SP=1111H D.SP=110FH5.汇编源程序出现语法错误的指令有(D)A.MOV[BX+SI],AL B.MOV AX,[BP+DI]C.MOV DS,AX D.MOV CS,AX6.下列串操作指令中,必须同时指明源串和目的串地址的指令是(D)A.STOSW B.LODSWC.SCASW D.CMPSW7.设BL中有一无符号数,实现把BL中的数乘以2,应选用的指令是(B)A.SHR BL,1B.SHL BL,1C.SAR BL,1D.RCR BL,18.执行PUSH AX指令的正确步骤是(A)A.1.SP←SP-1,(SP)←AH B.1.(SP)←AH,SP←SP-12.SP←SP-1,(SP)←AL2.(SP)←AL,SP←SP-1C.1.SP←SP+1,(SP)←AH D.1.(SP)←AH,SP←SP+12.SP←SP+1,(SP)←AL2.(SP)←AL,SP←SP+19.CF=1时转移到目标地址的条件转移指令是(B)A.JNC B.JC C.JZ D.JS10.在执行NEG指令时,对标志位CF有影响,其影响的规则是(C)A.对正数求补时,CF=0B.对负数求补时,CF=0C.对非零数求补时,CF=1D.对零求补时,CF=111.算术右移SAR和逻辑右移SHR两条指令执行后结果完全相同的情况是(A)A.目的操作数最高位为0B.目的操作数最高位为1C.目的操作数为任意情况D.无论什么情况都不可能相同12.设AL=04H,BL=0F8H,执行IMUL BL指令后,结果是(D)A.AX=0032H B.AX=00E0HC.AX=03E0H D.AX=0FFE0H13.指令的操作数中,允许出现表达式,例如BUF1与BUF2均为变量名,下面指令中语法正确的是(D)A.MOV AX,BUFl*BUF2B.MOV AX,BUF1/BUF2C.MOV AX,BUF1+ES:BUF2D.MOV AX,BUF2-BUF114.下面指令中,操作数的寻址方式为寄存器间接寻址的指令是(C )A.INC WORD PTR [BX+SI]B.INC CX,[SI+COUNT]C.NEG BYTE PTR [BX]D.ADD AX,B15.NUM EQU 80HDA DB 34HAND DA,NUM上述语句执行后,DA 中的内容是(D )A.0B4H B.80H C.34H D.016.直接、间接、立即三种寻址方式指令的执行速度,由快至慢的排序为(A )A.立即、直接、间接B.直接、间接、立即C.直接、立即、间接D.不一定17.语句DA1DB 2DUP(3,5,7)汇编后,该语句可等同于的语句是(D )A.DA1DB 3,5,7B.DA1DB 2,3,5,7C.DA1DB 3,5,7,2D.DA1DB 3,5,7,3,5,718.MOV AL,80HMOV CL,2SAR AL,CL上述指令序列执行后,结果是(D )A.AL=40H B.AL=20HC.AL=0C0H D.AL=0E0H19.下面是实现将AL 内容加1的压缩型BCD 码加法程序段,其中正确的指令序列是(A )A.INC AL B.ADD AL,1DAA DASC.ADD AL,1D.STCDAA AAA20.现有数据存储如图所示:30100H 30101H 30102H 30103H 设AL=01H,BX=0100H,DS=3000H 执行换码指令XLAT 后正确的结果是(B )A.AL=20H B.AL=38HC.AL=00H D.AL=41H21.若定义DAT DW 'A',则(DAT)和(DAT+1)两个相邻的内存中存放的数据是(B )A.0041H B.4100H 20H38H41H55HC.xx41H D.41xxH[注]选项C.和D.中的XX表示任意数据。
汇编语言程序设计试题和答案
《汇编语言程序设计》试题专业姓名成绩一、单项选择题(每1分,共15分).1将下列二进制数0111,1111,1111 转换为16进制数和10进制数是()A.07FFH 3021DB. 6FEH 1021DC. 07FFH 2012DD. 07FFH 2047D2. 在1BM Pc机的IN和OUT 指令中,I/o端口号通常是由Dx寄存器来提供的,但有时也可以在指令中用一个字节来表示端口号。
试问可以直接由指令指定的I/o端口号有多少个?( )A. 127DB.255DC. 256DD.128D3. 设MYDAT是一个字变量,下列指令中,错误的是()A.MOV BX,10100BB.MOV DS,AXC.ADD BX,[10100H]D.MOV BX,MYDAT[SI]4.设有关寄存器及存储单元的内容如下:(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100)=12H,(20102)=56H,(20103)=78H,(21200)=2AH,(21201)=4CH,(20202)=0B7H,(21203)=65H,试指出:MOV AX,1100h[BX]指令执行后,AX寄存器内是()A.5678HB.4C2AHC.2A4CHD.7856H5.一台微型计算机的字长为16位,如果采用字节编址,那么它可以访问的最大存储空间是多少字节( ),试用16进制数表示该机的地址范围()A.1M 0~FFFFFHB.64K 0~FFFFHC.128K 0~FFFFHD.128K –FFH~FFH6. 如果在一个程序段开始执行之前,(cs)=0A7F0H,(1P)=2B40H,试问该程序段的第一个字的物理地址是()A.BAA40HB.AAB40HC.AAA40HD.0D603H7.下列指令哪个是错误的(设OP1,OP2 是已经用DB定义的变量名)( )A.CMP BL,OP1B.MOV [BX],111001BC. INC OP2D.SAR AX,CL8.假定(DX)=10111001B,(CL)=05,(CF)=1试确定:RCL DL,CL 指令执行后,DX中的值是()A.00CEHB.009DHC.00B9HD.003BH9. 有符号定义语句如下:BUFF DB 1,2,3,‘123’EBUFF DB 0L EQU EBUFF - BUFF问L的值为多少( )A.6DB.7DC.3DD.5D.10. IBMPC机中下列那些寄存器可以用来存储存储器地址()A、BX,BP,SP,CXB、AX,SI,DI,DXC、BX,SI,DI,SPD、DX,SI,DI,SP11.下列指令中正确的是()A.MOV [BX],[SI]B.MOV AX,[SI][DI]C.MOV BX,OFFSET NAME[SI]D.MOV BYTE PTR [100],10012下列程序段执行后,寄存器BX中的内容是什么()MOV CL , 3MOV BX , 0B7HROL BX , 1RCR BX , CLA、0EDHB、0DEHC、0CDHD、0CCH13JB指令的测试条件是( )A. CF=0B. CF=1 C .OF∨CF=1 D.OF=114在DEBUG中()命令用来汇编一句汇编语言语句15 A 、A B、U C 、E D、D16. 指令STI 的功能是( )17(A)允许中断(B)不允许中断(C)允许单步(D) 不允许单步二.不定项选择题,漏错多选不得分。
汇编语言程序经典案例100例
当然可以帮你制作PPT!以下是关于《汇编语言程序经典案例 100例》的一份PPT大纲,以Markdown代码框的形式展示。你 可以根据这个大纲,进一步丰富内容,使其达到最少2500字 。
```markdown 汇编语言程序经典案例100例
01 汇编语言程序经典案例100例
案例六:汇编游戏
实现一个简单的汇编游戏,如猜数字或打砖块 结合图形和用户输入,展示汇编语言的实际应用
案例七:汇编与硬件交互
编写控制硬件设备的汇编程序,如LED显示控制 探讨汇编语言与底层硬件交互的原理和方法
案例八:内存管理
展示如何在汇编中进行内存分配和释放 解释堆栈、堆区和数据段的概念及其在汇编中的应用
汇编语言程序经典案例100例
案例一:Hello, World! 案例二:计算器 案例三:字符逆序 案例四:素数判断 案例五:文件操作 案例六:汇编游戏 案例七:汇编与硬件交互 案例八:内存管理 案例九:中断处理 案例十:多任务处理
案例一:Hello, World!
使用汇编语言编写经典的Hello, World!程序 解释程序的结构和汇编指令
案例二:计算器实现一个Fra bibliotek单的计算器程序,支持加减乘除运算 展示汇编中的数值处理和条件分支
案例三:字符逆序
编写程序将输入的字符串逆序输出 探讨字符串处理和循环结构在汇编中的应用
案例四:素数判断
判断输入的数字是否为素数 展示如何进行数值计算和判断,并介绍汇编中的位操作
案例五:文件操作
创建、读取、写入文件的汇编程序 分享文件操作所涉及的系统调用和汇编指令
案例九:中断处理
编写处理外部中断的汇编程序 探讨中断的概念、处理流程以及在汇编中的实现
微机实验:汇编语言程序的调试与运行步骤
软件实验一汇编语言程序的调试与运行一.实验目的1.学习数据传送和算术运算指令的用法2.熟悉在PC机上编辑、汇编、连接、调试和运行汇编语言程序的过程。
二.实验内容将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在DATA1和DA TA2为首的5个内存单元中,结果送回DATA1处。
三.程序框图图1.1两个多位十进制相加程序流程图四.程序清单DISP MACRO XMOV DL,X;要显示的字符送DL寄存器MOV AH,02H;DOS功能调用号是02HINT21H;21H中断程序是DOS功能调用ENDMDATA SEGMENTDATA1DB'12732'DATA2DB'06815'N EQU$-DA TA2DATA ENDSSTACK SEGMENT STACKSTA DB20DUP(?)TOP EQU$-STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,SS:STACK,ES:DA TA START:MOV AX,DA TAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXLEA SI,DA TA1;☆MOV BX,0MOV CX,NCALL DISPL;显示被加数DISP'+'LEA SI,DA TA2MOV BX,0MOV CX,NCALL DISPL;显示加数DISP'='LEA DI,DA TA1MOV CX,NCALL ADDA;调用加法子程序LEA SI,DA TA1MOV BX,0MOV CX,NCALL DISPL;显示运算结果DISP0DHDISP0AHMOV AX,4C00HINT21HDISPL PROC;显示子程序DS1:MOV AH,02HMOV DL,[SI+BX]INT21HINC BXLOOP DS1CALL DISPL;显示被加数DISP'+'LEA SI,DA TA2MOV BX,0MOV CX,NCALL DISPL;显示加数DISP'='LEA DI,DA TA1MOV CX,NCALL ADDA;调用加法子程序LEA SI,DA TA1MOV BX,0MOV CX,NCALL DISPL;显示运算结果DISP0DHDISP0AHMOV AX,4C00HINT21HDISPL PROC;显示子程序DS1:MOV AH,02HMOV DL,[SI+BX]INT21HINC BXLOOP DS1RETDISPL ENDPADDA PROC;加法子程序PUSH CXMOV BX,0AD1:SUB BYTE PTR[SI+BX],30HSUB BYTE PTR[DI+BX],30HINC BXLOOP AD1POP CXPUSH CXMOV BX,N-1;☆☆CLCAD2:MOV AL,[SI+BX]ADC AL,[DI+BX]AAAMOV[DI+BX],ALDEC BXLOOP AD2POP CXPUSH CXMOV BX,0;☆☆☆AD3:ADD BYTE PTR[DI+BX],30HINC BXLOOP AD3POP CXRET;☆☆☆☆ADDA ENDPCODE ENDSEND START2.简单叙述上机步骤,调试方法。
汇编语言在线测试及答案(1)
汇编语言在线测试及答案(1)习题一1.在计算机内部,计算机能够直接执行的程序语言是。
A.汇编语言B.C++语言C.机器语言D.高级语言2.在堆栈段中,存放栈顶地址的寄存器是。
A.IP B.SP C.BX D.BP3.指令指针寄存器IP用来存放代码段中的偏移地址。
在程序运行的过程中,它始终指向。
A.下一条指令的首地址B.下一条指令的地址C.当前指令的首地址D.当前指令的地址4.编译程序的功能是。
A.检查源程序中的语法错误和逻辑错误B.将源程序编译成目标程序C.改正源程序中的语法错误D.将高级语言源程序翻译成汇编语言源程序5.用户为了解决自己的问题,用汇编语言所编写的程序,称为。
A.目标程序B.源程序C.可执行程序D.汇编程序6.计算机中用来存储程序、数据等信息的记忆装置是。
A.控制器B.运算器C.CPUD.存储器7.在宏汇编中,源程序必须通过____编译_______生成目标代码,然后用连接程序将其转化为可执行文件, 该文件可在系统中运行。
习题二1 当 SS =3000H,SP =0100H 时,执行 PUSH AX 指令后,堆栈顶部的物理地址是()A.30100H B.30098H C.30102H D.300FEH2 设10000010B分别以原码、补码及反码表示时,则对应的十进制数依次是()A.-82、-126、-2 B.-2、-125、126C.-2、-126、-125 D.-82、-125、1253 标志寄存器中属于控制标志位的是()A. DF,OF,SFB. DF,IF,TFC. OF,CF,PFD. AF,OF,SF4 设(AX)=4544H,在执行指令”SUB AH,AL”之后,()A.CF=0,OF=0 B.CF=0,OF=1C.CF=1,OF=0 D.CF=1,OF=15 若寄存器AX、BX、CX、DX的内容分别为18,19,20,21时,依次执行PUSH AX,PUSH BX,POP CX,POP DX后,寄存器CX的内容为______19____________。
大工14 秋《汇编语言程序设计》在线测试1答案
大工14 秋《汇编语言程序设计》在线测试1
单选题判断题多选题
一、单选题(共10 道试题,共30 分。
)
1. 下面的数值表示中,和127相等的是哪一个()
A. 11111111B
B. 127H
C. 80H
D. 7FH
正确答案:D
2. 在IBM PC中,一个字为()位二进制数。
A. 8位
B. 16位
C. 32位
D. 64位
正确答案:B
3. 一个有128个字的数据区,它的起始地址为12ABH:00ABH,请给出这个数据区最末一个字单元的物理地址是()
A. 12CSBH
B. 12B6BH
C. 12C59H#12BFEH
正确答案:C
4. 8086CPU在执行8位有符号数运算后,产生溢出是结果超出了:()
A. 0~255
B. +128~-128
C. +255~-256
D. +127~-128
正确答案:D
5. 已知物理地址(371F0H)=12H,(371F1H)=34H,(371F2H)=56H,如从地址371F0H 中取出一个字的内容是()
A. 3412H
B. 3421
C. 3410H
D. 3424
正确答案:A
6. CPU要访问的某一存储单元的实际地址称()
A. 段地址
B. 偏移地址
C. 物理地址
D. 逻辑地址。
汇编程序练习题目
1.已知(AX)=1234H,执行下述三条指令后,(AX)=( D )MOV BX,AXNEG BXADD AX,BXA.1234H B.0EDCCH C.6DCCH D.0000H 2.写出完成下述功能的程序段:(1)传送25H到AL寄存器(2)将AL的内容乘以2(3)传送15H到BL寄存器(4)AL的内容乘以BL的内容并请写出最后(AX)=?答:(1)MOV AL, 25H(2)SHL AL, 1(3)MOV BL, 15H(4)MUL BL最后,(AX)=612H =1554一个有128个字的数据区,它的起始地址为12ABH:00ABH,请给出这个数据区最末一个字单元的物理地址是( c )A.12CSBH B.12B6BH C.12C59H D.12BFEH1、在实模式下,段地址和偏移地址为3017:000A的存储单元的物理地址是3017AH?如果段地址和偏移地址是3010:002A和3010:007A的存储单元的物理地址分别是3017AH 和3017AH选择题:循环指令loop again与(A)等价A dec cx;jnz againB inc cx;jnz againC mul cx;jnz againD add cx;jnz again2程序写出结果:mess db 'chengxujieguo''13''10''$'mov bx,offset messmov ax,10mov dl,3sub ax,1mul dladd bx,axmov cx,13a:mov dl,[bx]mov ah,02int 21hinc bxloop amov ah,2dhint 21hmov ah,2ahint 21h答案:chengxujieguo1.指令MOV AX,[BX+4000H]的寻址方式为(B)A 寄存器间接寻址 B、寄存器相对寻址 C、立即寻址 D、直接寻址2.试编写一程序段,要求在长度为100H字节的数组中,找出大于42H的无符号数的个数并存入字节单元UP中,找出小于42H的无符号数的个数并存入字节单元DOWN中。
汇编语言程序设计试卷
汇编语言程序设计试卷一. (共75 题,共150 分)1.下列说法错误的是。
(2 分)A.机器指令的形式包含操作码和地址码B.计算机只能够识别规定好的机器指令C.不同计算机系统之间的机器指令能够相互兼容D.汇编语言的主要操作和机器指令基本上一一对应★检查答案标准答案:C2.两个有符号数相减,通过标志位判断结果是否溢出。
(2 分)A.ZFB.CFC.SFD.OF★检查答案标准答案:D(2 分)3.汇编语言和高级语言的比较,下列说法错误的是A.汇编语言和高级语言都不能被机器直接识别B.完成同样的功能,汇编语言占据空间小C.高级语言可以使用变量,但汇编语言不行D.汇编语言中有类似于高级语言的宏功能★检查答案标准答案:C4.下列寄存器中,哪个寄存器不能供汇编程序直接访问. (2 分)A.SPB.BPC.CSD.IP★检查答案标准答案:D5.下列寄存器,哪个不能作基址寄存器。
(2 分)A.BXB.BPC.SID.ESI★检查答案标准答案:C6.设有关寄存器及存储单元的内容如下:则指令MOV AX, 1100H[BX][SI] 执行完毕后,AX 寄存器中的值是。
(2 分)A.65B7HB.3412HC.4C2AHD.7856H★检查答案标准答案:AA.可以作立即寻址的操作数B.也可作某些存贮器操作数的的位移量组成部分C.在数据定义伪指令语句中给变量赋初值D.可以作目的操作数★检查答案标准答案:D8.若(ECX)=0ABCD1234H(BL)=0E3H,则语句MOVSX ECX,BL执行后:(ECX)的值为。
(2 分)A.0ABCD1234HB.0FFFFFFE3HC.000000E3HD.0ABCD12E3H★检查答案标准答案:B(2 分)9.若(AX)=0FFFDH ,则语句ADD AX,7FFFH 执行后,下列说法正确的是。
A.(AX) =7FFCH,(OF)=1 ,(CF)=1B.(AX) =17FFCH ,(OF)=1 ,(CF)=1C.(AX)=7FFCH,(OF)=0 ,(CF)=1 D.(AX)=17FFCH ,(OF)=0 ,(CF)=1★检查答案标准答案:C10.在语句INC SS:[BX] 中,操作数使用的段寄存器是。
20个简单汇编语言程序
20个简单汇编语言程序以下是20个简单的汇编语言程序示例:1. 计算两个数的和:MOV AX, 5。
ADD AX, 3。
这段代码将 5 存储在 AX 寄存器中,然后将 3 加到 AX 中,最终 AX 中的值为 8。
2. 比较两个数的大小:MOV AX, 5。
CMP AX, 3。
这段代码将 5 存储在 AX 寄存器中,然后将 AX 中的值与 3 进行比较。
3. 循环打印数字:MOV CX, 10。
MOV AX, 1。
LOOP_START:MOV DL, AL.ADD DL, 48。
MOV AH, 2。
INT 21h.INC AL.LOOP LOOP_START.这段代码使用循环打印数字 1 到 10。
4. 计算阶乘:MOV CX, 5。
MOV AX, 1。
LOOP_START:MUL CX.LOOP LOOP_START.这段代码计算 5 的阶乘,并将结果存储在 AX 寄存器中。
5. 判断奇偶数:MOV AX, 7。
AND AX, 1。
这段代码将 7 存储在 AX 寄存器中,然后将 AX 中的值与 1进行与运算,结果为 1,表示奇数。
6. 字符串反转:MOV SI, OFFSET str.MOV DI, OFFSET str.MOV CX, LENGTHOF str.DEC CX.REVERSE_LOOP:MOV AL, [SI]MOV DL, [DI+CX]MOV [DI+CX], AL.MOV [SI], DL.INC SI.LOOP REVERSE_LOOP.这段代码将字符串 `str` 反转。
7. 计算斐波那契数列:MOV CX, 10。
MOV AX, 0。
MOV BX, 1。
FIB_LOOP:ADD AX, BX.XCHG AX, BX.LOOP FIB_LOOP.这段代码计算斐波那契数列的前 10 个数。
8. 判断一个数是否为质数:MOV AX, 17。
MOV BX, 2。
CHECK_PRIME:XOR DX, DX.DIV BX.CMP DX, 0。
汇编语言程序设计模拟题.
汇编语⾔程序设计模拟题.《汇编语⾔程序设计》模拟试题⼀、单项选择题1、指令JMP FAR PTR DONE属于()。
A.段内转移直接寻址B.段内转移间接寻址C.段间转移直接寻址D.段间转移间接寻址2、执⾏下⾯指令序列后,结果是()。
MOV AL,82HCBWA. AX=0FF82HB. AX=8082HC. AX=0082HD. AX=0F82H3、8088/8086存储器分段,每个段不超过()。
A.64K个字B.32K个字节C.1兆个字节D.64K个字节4、CPU发出的访问存储器的地址是()。
A.物理地址B.偏移地址C.逻辑地址D.段地址5、BUF DW 10H DUP(3 DUP(2,10H),3,5)上述语句汇编后,为变量BUF分配的存储单元字节数是()。
A.80HB.100HC.124D.1926、若AX= - 15要得到AX=15应执⾏的指令是()。
A.NEG AXB.NOT AXC.INC AXD.DEC AX7、8086/8088系统执⾏传送指令MOV时()。
A.不影响标志位B.影响DF⽅向标志C.影响SF符号标志D.影响CF进位标志8、MOV AL,79ADD AL,0B1H上⾯指令执⾏后,设置的标志位CF和OF的值是()。
A.CF=0,OF=1B.CF=1,OF=1C.CF=0,OF=1D.CF=1,OF=09、检查BUF的内容是否为正偶数,如是正偶数,则AL=0。
下⾯程序段正确的是()。
A. MOV AL,BUFB. MOV AL,BUFJS K1 AND AL,11SHR AL,1 JNZ K2JNC K1 MOV AL,0MOV AL,0 K2:……K1:C. MOV AL,BUFD. MOV AL,BUFTEST AL,81H JNP K4JNZ K3 TEST AL,80HMOV AL,0 JNZ K4K3:MOV AL,0K4:10、下列指令中操作数在代码段中的是()。
汇编程序设计实验
汇编程序设计实验汇编程序设计实验是计算机科学与技术专业中一项重要的实践教学环节,它旨在培养学生对计算机硬件结构和低级语言程序设计的深入理解。
通过实验,学生可以学习到如何使用汇编语言编写程序,以及如何将这些程序转换为机器可以执行的指令。
实验目的1. 理解汇编语言的基本概念和语法结构。
2. 掌握汇编语言程序设计的基本方法和技巧。
3. 熟悉汇编程序的编写、编译、调试和运行过程。
4. 增强对计算机硬件工作原理的认识和理解。
实验环境- 汇编语言开发环境,如MASM、NASM等。
- 汇编器和链接器,用于将汇编源代码转换为可执行文件。
- 调试工具,如调试器,用于检查程序的执行过程。
实验内容1. 汇编语言基础- 学习汇编语言的指令集和操作数。
- 了解汇编语言的基本语法和程序结构。
2. 编写简单的汇编程序- 编写一个程序,实现数据的输入和输出。
- 编写一个程序,实现简单的算术运算。
3. 寄存器和内存操作- 学习如何使用寄存器进行数据存储和操作。
- 编写程序,实现内存地址的数据读写。
4. 循环和条件判断- 学习循环结构和条件判断的实现方法。
- 编写程序,实现循环和条件判断的功能。
5. 子程序调用- 学习子程序的编写和调用方法。
- 编写一个主程序和若干子程序,实现模块化编程。
6. 中断和异常处理- 了解中断和异常的基本概念。
- 编写程序,实现简单的中断服务程序。
7. 汇编与高级语言的接口- 学习如何将汇编程序与C/C++等高级语言程序进行接口。
- 编写程序,实现汇编语言与高级语言的混合编程。
实验步骤1. 环境搭建:安装并配置汇编语言开发环境。
2. 编写代码:根据实验要求编写汇编语言源代码。
3. 编译程序:使用汇编器将源代码编译为机器代码。
4. 链接程序:使用链接器将编译后的代码与其他必要的库链接成可执行文件。
5. 调试程序:使用调试工具检查程序的执行过程,找出并修复错误。
6. 运行程序:在适当的环境下运行程序,验证程序的正确性。
汇编语言程序测试
实验1 循环与分支程序设计一、实验目的1、熟悉并且掌握汇编语言的基本指令;2、熟练地掌握循环与分支程序的设计过程;3、掌握带符号数的比较转移指令:JL、JLE、JG、JGE;4、伪指令EQU 及操作符'$'的使用。
二、实验类型验证性实验三、软件环境1、使用类DOS操作环境2、编辑工具:文本编辑软件3、汇编用具:MASM 、LINK4、调试工具:DEBUG.EXE四、实验内容A、设计要求1、编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z或a-z 字符,均显示“c”;若是回车字符,则结束程序,若为其它字符则不显示,继续等待新的字符输入。
2、提示编程:①回车字符的ASCII码为0DH②显示字符用INT 21H的2号调用B、设计要求已知DATA单元开始存放三个带符号数1、判断三个数是否同号,若同时为正,显示“+”,若同时为负,则显示“—”,否则显不“*”。
2、显示三个数中的最小值。
五、实验步骤1、输入原程序,汇编并连接此程序,修改语法错误,直到生成可执行文件。
2、观察实验结果是否正确。
3、如不正确,用DEBUG.EXE进行调试,直到程序完全正确。
六、实验报告实验报告编写说明:1、实验名称;2、实验类型;3、实验目的;4、实验内容及要求;5、程序设计概要;6、调试说明。
包括上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析;7、写出源程序清单;8、实验心得体会。
实验2 子程序结构设计一、实验目的1、掌握子程序设计方法,合理划分层次2、掌握子程序的调用与返回的方法3、掌握通过堆栈转送参数的方法二、实验类型验证性实验三、软件环境1、使用类DOS操作环境2、编辑工具:文本编辑软件3、汇编用具:MASM 、LINK4、调试工具:DEBUG.EXE四、实验内容A、设计要求1、编写一个主程序,从键盘接收若干个字符,然后用调用的方法,调用子程序统计字符串中字符’b’的个数。
汇编语言程序设计第1阶段测试题
汇编语⾔程序设计第1阶段测试题江南⼤学现代远程教育第⼀阶段测试卷A考试科⽬:《汇编语⾔程序设计》第1章⾄第3章(总分100分)时间:90分钟______________学习中⼼(教学点)批次:层次:专业:学号:⾝份证号:姓名:得分:⼀、单选题(每题2分,共22分)1.下列指令中,不正确的指令是。
A.MOV [BX+SI],AX B.MOV AX,[BX + SI]C.MOV AX,SI D.MOV AX,[BX + CX]2、下列传送指令中有语法错误的是A、MOV CS,AXB、MOV DS,AXC、MOV SS,AXD、MOV ES,AX3.表⽰⼀条处理器指令所在存储单元的符号地址是。
A.变量B.常量C.标号D.偏移量4.如代码段段名为COSE,它的起始地址为20A00H,程序开始执⾏的起始地址标号为START,对代码段寄存器CS赋值段地址值的⽅法是。
A.MOV CS,20A0HB.ASSUME CS:COSEC.END STARTD.MOV AX,COSEMOV CS,AX5.11000110B为⼀个数的⼆进制补码,该数的⼗进制原码为。
A.+198 B.-198 C.+58 D.-586、指令“MOV CX,[BP+16]”的源操作数采⽤的段寄存器为。
A.CS B.SSC.DS D.ES7.指令“MOV ES:[2000H],AX”中,⽬的操作数的寻址⽅式为。
A.⽴即数寻址B.寄存器寻址C.存储器直接寻址D.寄存器间接寻址8.若(DS)=1100H,(SS)=2200H,(BP)=100H,(DI)=200H,指令MOV AX,[BP+DI+5]中源操作数的有效地址EA为。
A.11305H B. 22305H C.305H D.33305H9.16位⼆进制补码表⽰为⼗进制数的范围是。
A.-32768D~32768D B.-32768D~32767DC.-32767D~32768D D.-32767D~32767D10、BUF DW 10H DUP(3 DUP(2,10H),3,5)上述语句汇编后,为变量BUF分配的存储单元字节数是A、80HB、100HC、124D、19211.在汇编语⾔程序中,对END语句的叙述正确的是。
汇编语言程序设计实验2汇编源程序编写与汇编、调试
汇编语⾔程序设计实验2汇编源程序编写与汇编、调试汇编语⾔程序设计实验2 汇编源程序编写与汇编、调试⼀、实验⽬的1. 理解并掌握汇编源程序组成与结构2. 掌握汇编语⾔源程序编写→汇编→链接→调试的⼯具和⽅法3. 理解汇编源程序中地址表⽰、段寄存器的⽤法4. 理解和掌握寄存器间接寻址⽅式[bx]5. 通过汇编指令loop的使⽤理解编程语⾔中循环的本质⼆、实验内容及结果(⼀)实验任务⼀使⽤任意⼀款⽂本编辑器,编写8086汇编源程序ex1.asm。
源代码如下:assume cs:codecode segmentmov ax, 0b810hmov ds, axmov byte ptr ds:[0], 1mov byte ptr ds:[1], 1mov byte ptr ds:[2], 2mov byte ptr ds:[3], 2mov byte ptr ds:[4], 3mov byte ptr ds:[5], 3mov byte ptr ds:[6], 4mov byte ptr ds:[7], 4mov ah, 4chint 21hcode endsend要求:使⽤8086汇编程序编写、汇编、链接、运⾏、调试⽅法,对ex1.asm进⾏汇编、链接、运⾏,使⽤debug⼯具调试可执⾏⽂件。
使⽤masm、link对ex1.asm进⾏汇编、链接,得到可执⾏⽂件ex1.exe,运⾏并观察结果。
使⽤debug⼯具对程序进⾏调试使⽤debug加载可执⾏⽂件ex1.exe后,使⽤d命令查看程序段前缀PSP所占的256个字节。
结合可执⾏⽂件中寄存器CX的值,使⽤u命令对ex1.exe进⾏精确反汇编使⽤g命令执⾏到程序退出执⾏之前(即源码⽂件中line16之前),观察结果。
1、⾸先使⽤masm对*.asm⽂件进⾏编译,⽣成包含机器代码的⽬标⽂件(*.obj)编译后没有问题(截图中能看到提⽰说:0 Warning Errors和0 Severe Errors)这时候再返回到⽂件夹中就会发现多了⼀个.obj⽂件对 *.obj ⽬标⽂件进⾏连接,得到可执⾏⽂件(.exe⽂件)。
汇编实验汇总
汇编语言第一次实验实验目的1)了解汇编语言程序的基本结构3)掌握汇编语言程序编写、编译、链接、运行的基本步骤和命令3)自学并掌握运用DEBUG命令进行程序调试的基本命令实验题目1.选用某编辑器(MASM或QASM),输入Helloworld.asm程序(照着实验要求及辅导的图敲,简单理解即可,后面会详细讲)2.使用masm与link命令汇编并运行程序3.使用ml命令汇编并运行程序4.自学”Debug调试程序”,了解其基本选项的应用5.查看“Hello World”字符串所在的内存地址,使用debug工具将“W”改为“w”6.掌握选项的使用:A U D E G H P T Q R 不解释汇编语言第二次实验实验目的2)熟练掌握汇编语言程序的书写、汇编、连接等步骤2)掌握基本的debug命令,并对程序进行基本的调试实验题目1.将给定程序输入,并汇编、连接后生成可执行文件lab2.exe2.Debug lab2.exe3.尝试(运用debug):1)将内存中字符串“hello world”改写成“HELLO WORLD”,并显示修改后的结果e指令2)展示3F24+4A2B和3F24-4A2B的计算h指令3)在内存中输入MOV AX, 50 a指令ADD AX,AX执行并查看AX的变化,修改AX的值为FFFF r指令;用于前两次实验的hello world代码.MODEL SMALL.STACK ;默认为1k,也可指明大小.CODESTR DB 0DH,0AH,'HELLO WORLD!',0DH,0AH,'$'.STARTUPLEA DX,STRMOV AH,09HINT 21H.EXIT 0.END;memory_model有如下7种存储模型:---- Tiny: 所有数据和代码都放在一个段内,数据和代码都是近访问,Tiny程序可以写成.com文件形式,com程序必须从0100H存储单元开始.此模型一般用于小程序.Small: 所有数据放在一个64K数据段中内,所有代码放在另一个64K代码段内,数据和代码都是近访问.Medium: 代码段使用多个段,一般一个模块一个段,而数据则合并成一个64K的段组,数据是近访问,代码可以远访问.Compact: 所有代码都放在一个64K代码段内,数据可放在多个段内,数据可远访问, 代码是近访问.Large: 代码和数据都可用多个段,代码和数据都可以远访问.Huge: 与Large模型相同,差别是允许数据段大小超过64K.Flat: 允许用户用32位偏移量,只能在OS/2下或其他保护模式操作系统下使用, MASM6可以支持此模型.汇编语言第三次实验实验目的熟练使用Debug,理解数据在内存中的存放,并理解并练习各种寻址方式。
1-11章汇编测试题目(汇编网)
第1章汇编测试题目(后附答案)1、1个CPU读取1024字节的数据至少读取了512次,数据总线的宽度_____。
A、8B、10C、16D、322、在8086的内存空间中下面哪段内存是不可写的_____。
A、0~9FFFFB、A0000~B7FFFC、B8000~BFFFFD、C0000~FFFFF3、下列哪个计算机部件能确定一组二进制数是要执行的指令还是用于操作的数据_____。
A、显示器B、硬盘C、内存D、中央处理器4、关于总线的说法错误的是_____。
A、地址总线的宽度决定了CPU的寻址能力。
B、数据总线的宽度决定了CPU与外界进行数据传送时的一次数据传送量。
C、控制总线的宽度决定了CPU对系统中其它器件的控制能力。
D、总线就是负责CPU内部信息传送的一系列导线。
5、1KB的存储器有____个存储单元A、1000B、1024C、512D、2566、1个CPU的寻址能力为32KB,那么它的地址总线宽度为_____。
A、13B、15C、18D、32k7、1KB的存储器可以存储____个bit 。
A、1024B、8192C、1000D、88、1个CPU访问的最大内存地址是1023,地址总线的宽度_____。
A、8B、10C、13D、149、计算机中一个存储单元可以存储多少信息_____。
A、1bitB、1ByteC、1KBD、512B10、下列说法正确的是:____A、在计算机中,存储器分为指令存储器和数据存储器。
B、电子计算机的最小信息单位是Byte。
C、微型存储器的容量是以Byte为最小单位来计算的。
D、在“1KB=1024B”中,“B”代表的是Bit。
11、一个CPU的寻址能力为8KB,那么它的地址总线的宽度为____。
A、8B、10C、12D、1312、下列说法中正确的是____。
A、不同的微处理器有相同的机器指令集。
B、机器语言和汇编语言都需要编译程序来编译成机器指令。
C、每一个汇编指令都对应唯一的一个机器指令。
汇编语言习题-测验题答案
汇编语言各章习题、测试题答案习题一1.1 分别将下列二进制数作为无符号数和带符号数转换为十进制和十六进制数11010011 01110111 10000011 00101111 101010101.2 十六进制运算1A52H+4438H 3967H-2D81H 37H×12H 1250H×4H1.3 将十进制数变为8位补码并做运算(结果用二进制、十六进制、十进制表示)29+53 73-24 -66+82 -102-151.4 用压缩BCD码计算(结果用二进制、BCD码、十进制表示)29+53 73-24 66+18 132+751.5 符号位扩展(字节扩展为字,字扩展为双字)20A3H 94H 3456H 7FH EC00H1.6 若机器字长为16位,其无符号数表示范围是多少?带符号数表示范围是多少?分别用十进制和十六进制表示。
1.7 写出下列十六进制数所能代表的数值或编码:(1)38H (2)FFH (3)5AH (4)0DH1.8 将下列十进制数分别转换为二进制、十六进制、二进制补码、压缩BCD码和ASCII码:(1)108 (2)46 (3)-15 (4)2541.9 写出下列算式的8位二进制运算结果,标志位CF、SF、ZF、OF分别是什么值?(1)56+63 (2)83-45 (3)-74+29 (4)-12-371.10 查表,指出ASCII码0DH、0AH、07H、1BH、20H、60H、50H、70H对应的控制字符。
测验一单选题:1.已知X=76,则[X]补= 。
A. 76HB. 4CHC.0B4HD.0CCH2.已知[X]补=80H,则X= 。
A. 80HB. 0C. 0FFHD. -80H3.已知[X]补=98H,则[X]补/2= 。
A. 0CCHB.4CHC. 49HD. 31H4.已知X=78,Y=-83,则[X+Y]补= 。
A. 0F5HB. 0A1HC. 0FBHD. 65H5.将124转换成十六进制数的结果是A. 7CHB. 7DHC. 7EHD. 7BH6.将93H看成一个压缩BCD码,其结果是A. 10010101B. 10010011C.10000011D.100000017.45转换成二进制数是A.10101101B.00111101C. 00101101D. 100111018.6CH转换成十进制数是A. 118B. 108C. 48D. 689.将93H扩展为字的结果是A. FF93HB. 0093HC. 1193HD. 1093H10.56的压缩BCD码是A. 38HB. 56HC. 0506HD. 3536H11.ASCII中的47H表示的字符是A. “7”B. “G”C. “g”D. “E”12.十进制数-128的8位二进制数的补码为A. 11111110B. 01111111C. 10000000D. 1000000113.下列为补码表示,其中真值最大的是A. 10001000B.11111111C.00000000D.0000000114.十六进制数88H,可表示成下面几种形式,请找出错误的表示A. 无符号十进制数136B. 带符号十进制数-120C. 压缩BCD码十进制数88D. 8位二进制数-8的补码15.计算机对字符、符号采用统一的二进制编码。
【Selected】程序汇编实验举例及总结.doc
一、实验内容1.在屏幕上显示一个字符的源程序:DATASSEGMENTSTRINGDB'HELLO!','$'ORG100HDATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAG,DATASMOVDS,AGLEADG,STRINGMOVAH,09HINT21HMOVAH,4CHINT21HCODESENDSENDSTART2.编写一个程序,实现字符串的复制功能,并且将复制的字符串显示出来DATASSEGMENTSTRING_ADB'ICHLIEBEDICH','$'COUNTEQU$-OFFSETSTRING_ASTACASSEGMENTSTRING_BDBCOUNTDUP(?) STACASENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACAS START:MOVAG,DATASMOVDS,AGMOVAG,STACASMOVES,AGLEASI,STRING_ALEADI,STRING_BMOVCG,COUNTSTDREPMOVSBLEADG,STRING_BMOVAH,9INT21HMOVAH,4CHINT21HMOVAH,4CHINT21HCODESENDS3、利用中断调用,在屏幕上显示1—9之间随机数。
中断号86HDATASSEGMENTCLADB13,10,'WEAREGOINGTOPRODUCEANUMBERATRANDOM:$:' INFONDB0DH,0AH,'THEPROGRAMRUNSGOOD$'DATASENDSSTACASSEGMENTSTACADB200DUP(0)STACASENDSCODESSEGMENTASSUMEDS:DATAS,SS:STACAS,CS:CODESSTART:MOVAG,DATASMOVDS,AGLEADG,CLAMOVAH,9INT21HMOVAG,0MOVES,AG;MOVBG,86HG4CLIMOVWORDPTRES:[BG],OFFSETRANMOVWORDPTRES:[BG+2],SEGRANSTIINT86H MOVAH,02H INT21H LEADG,INFON MOVAH,9INT21H MOVAG,4C00H INT21H RANPROC PUSHCG PUSHDG MOVAH,0INT1AH MOVAG,DG GORDG,DG MOVBG,10 DIVBG ADDDL,30H MOVAH,02H INT21H POPDG POPCGIRETRANENDPCODESENDSENDSTART4.复制字符串,并倒序输出DATASSEGMENTSTRING_ADB'stillhere',13,10,'$'STRING_LDB'$'DATASENDSSTACASSEGMENTSTRING_BDB100DUP(?)STACASENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACASSTART:MOVAG,DATASMOVDS,AGMOVAG,STACASMOVSS,AGLEASI,STRING_LMOVAG,SILEASI,STRING_ALEADI,STRING_BSUBAG,SISUBAG,3 MOVCG,AG MOVBG,AG STD REPMOVSB LEADG,STRING_B MOVAH,9INT21H MOVDL,13 MOVAH,2INT21H MOVDL,10 MOVAH,2INT21H LEASI,STRING_B MOVCG,BG ADDSI,BG DECSIS:MOVDL,[SI] MOVAH,2INT21HDECSILOOPSMOVAH,004CHINT21HCODESENDSENDSTART5、显示比较两个数的大小DATASEGMENTADB33HBDB87HDATAENDSSTACASEGMENTDW128DUP(?)STACAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACASTART:MOVAG,DATAMOVDS,AGMOVAL,'A'CMPB,ALJABGAMOVDL,'A'MOVBL,'B'JMPDISPBGA:MOVDL,'B'MOVBL,'A'DISP:MOVAH,2INT21HMOVDL,'>'INT21HMOVDL,BLINT21HMOVAH,4CHINT21HCODEENDSENDSTART6、键盘输入10个学生的成绩,编写一个程序统计60-69分,70-79分,80-89分,90-99分及100分的人数,分别存放在Score6,Score7,Score8,Score9和Score10单元中。
实验一 基础汇编语言程序设计
实验一基础汇编语言程序设计一、实验目的:1、学习和了解TEC-XP16教学实验系统监控命令的用法。
2、学习和了解TEC-XP16教学实验系统的指令系统。
3、学习简单的TEC-XP16教学实验系统汇编程序设计。
二、预习要求:1、学习TEC-XP16机监控命令的用法。
2、学习TEC-XP16机的指令系统、汇编程序设计及监控程序中子程序调用。
3、学习TEC-XP16机的使用,包括开关、指示灯、按键等。
4、了解实验内容、实验步骤和要求。
三、实验步骤:使用监控程序的A命令,逐行输入并直接汇编单条的汇编语句,之后使用G命令运行这个程序。
缺点是不支持汇编伪指令,修改已有程序源代码相对麻烦一些,适用于建立与运行短小的汇编程序。
四、实验内容:1、输入下列各汇编程序段,将结果调试出来,并回答问题。
程序1:A 2000↙2000: IN 81SHR R0SHR R0JRNC 2000IN 80OUT 80RET注意:在十六位机中,基本I/O接口的地址是确定的,数据口的地址为80,状态口的地址为81。
问题:⑴该程序段的功能是什么?程序2:>A 2060↙2060:MVRD R1,0000MVRD R2,00OAMVRD R3,00002066:INC R3ADD R1,R3CMP R3,R2JRNZ 2066RET问题:⑴该程序段的功能是什么?⑵如何察看结果?结果是什么?⑶请用一字长的指令替换程序中的MOV R3,0 写出该语句。
程序3:用次数控制在终端屏幕上输出'0'到'9'十个数字符。
>A 2020↙2020:MVRD R2,00OA ;送入输出字符个数MVRD R0,0030 ;“0”字符的ASCII 码送寄存器R0OUT 80 ;输出保存在R0 低位字节的字符DEC R2 ;输出字符个数减1JRZ 202E ;判10个字符输出完否,已完,则转到程序结束处PUSH R0 ;未完,保存R0 的值到堆栈中2028: IN 81 ;查询接口状态,判字符串行输出完成否,SHR R0 ;JRNC 2028 ;未完成, 则循环等待POP R0 ;已完成, 准备输出下一字符并从堆栈恢复R0 的值INC R0 ;得到下一个要输出的字符JR 2024 ;转去输出字符202E: RET问题:⑴若把IN 81, SHR R0, JRNC 2028 三个语句换成4个MVRR R0,R0 语句, 该程序执行过程会出现什么现象? 试分析并实际执行一次。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、摆花(NOIP2012第3题)小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共 m 盆。
通过调查顾客的喜好,小明列出了顾客最喜欢的n 种花,从 1 到n 标号。
为了在门口展出更多种花,规定第i 种花不能超过a i盆,摆花时同一种花放在一起,且不同种类的花需按标号的从小到大的顺序依次摆列。
试编程计算,一共有多少种不同的摆花方案。
【输入】输入文件flower.in,共2 行。
第一行包含两个正整数n 和m,中间用一个空格隔开。
第二行有n 个整数,每两个整数之间用一个空格隔开,依次表示a1、a2、……a n。
【输出】输出文件名为flower.out。
输出只有一行,一个整数,表示有多少种方案。
注意:因为方案数可能很多,请输出方案数对1000007 取模的结果。
【输入输出样例说明】有 2 种摆花的方案,分别是(1,1,1,2),(1,1,2,2)。
括号里的 1 和 2 表示两种花,比如第一个方案是前三个位置摆第一种花,第四个位置摆第二种花。
【数据范围】对于20%数据,有0<n≤8,0<m≤8,0≤a i≤8;对于50%数据,有0<n≤20,0<m≤20,0≤a i≤20;对于100%数据,有0<n≤100,0<m≤100,0≤ a i≤100。
[算法分析]二维递推公式:F[I,j]表示I种花到j盆的种数,则F[I,j]=f[i-1,j]+f[i-1,j-1]+……+f[i-1,j-a[i]];其中,边界是:f[1,i]=1 0<=i<=a[1]F[I,0]=1 0<=i<=nvar f:array[0..101,0..101] of longint;a:array[0..101] of longint;n,m,i,j,k:longint;beginreadln(n,m);for i:=1 to n do read(a[i]);for i:=0 to a[1] do f[1,i]:=1;for i:=0 to n do f[i,0]:=1;for i:=2 to n dofor j:=1 to m dofor k:=j downto j-a[i] doif k>=0 then beginf[i,j]:=f[i,j]+f[i-1,k];f[i,j]:=f[i,j] mod 1000007;end;writeln(f[n,m]);end.2、P1087《Car的旅行路线》又到暑假了,住在城市A的Car想和朋友一起去城市B旅游。
她知道每个城市都有四个机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路,第i 个城市中高速铁路的单位里程价格为ti,任意两个不同城市的机场之间均有航线,所有航线单位里程的价格均为t,如图1给出了3个城市的一个示例。
城市B的路线才能尽可能的节省花费呢?她发现这并不是一个简单的问题,于是她来向你请教。
你的任务是找出一条从城市A到城市B的旅游路线,出发和到达城市中的机场可以任意选取,要求总的花费最少。
输入第一行有四个正整数s,t,A,B。
s(0<s<=100)表示城市的个数,t表示飞机单位里程的价格,A,B分别为城市A,B的序号,(1<=A,B<=s)。
接下来有s行,其中第i行均有7个正整数xi1,yi1,xi2,yi2,xi3,yi3,ti,这当中的(xi1,yi1),(xi2,yi2),(xi3,yi3)分别是第i个城市中任意三个机场的坐标,ti为第i个城市高速铁路单位里程的价格。
输出输出最小费用,小数点后保留2位。
示例输入car.in3 10 1 31 1 1 3 3 1 302 5 7 4 5 2 18 6 8 8 11 6 3示例输出car.out47.55[分析]首先是想到骗分,考虑特殊情况,如果要到的两个城市一样,则输出“0.00”,那么可以得到一个点的分数(共6个点)。
用A数组保存每个城市四个点的坐标,以及铁路价格。
A[1,1]、A[1,2]表示第1个点的坐标,A[1,3]、A[1,4]表示第2个点的坐标,A[1,5]、A[1,6]表示第3个点的坐标,A[1,9]表示铁路价格。
下面的任务是求出第4个点的坐标,方法是:直角顶点的坐标是(x1,y1),另外两点的坐标是(x2,y2)、(x3,y3)。
则有:(x1-x2)*(x1-x3)+(y1-y2)*(y1-y3)=0,从而求出第4个点的坐标是:x4=x2+x3-x1, y4=y2+y3-y1.用B数组存放任意两点的直走代价(距离*价格)。
分两类情况:一是同一城市之间,二是不同城市之间。
最后用FLO算法,求出任意两点间的最小代价。
输出的时候要找出两个城市的最小代价。
Var p,q,n,s,t,m,i,j,k,i1,j1,x,y,z:longint;a:array[1..100,1..9] of longint;b:array[1..400,1..400]of real;min:real;Function dist(x1,y1,x2,y2:integer):real;Begindist:=sqrt(sqr(x1-x2)+sqr(y1-y2));End;Procedure work;Var i,j,k:integer;s1,s2:real;Beginfor i:=1 to s dobeginfor j:=1 to 3 dofor k:=j+1 to 4 dobegins1:=dist(a[i,j*2-1],a[i,j*2],a[i,k*2-1],a[i,k*2]);b[(i-1)*4+j,(i-1)*4+k]:=s1*a[i,9];b[(i-1)*4+k,(i-1)*4+j]:=s1*a[i,9];end;end;for i:=1 to s-1 dofor i1:=1 to 4 dofor j:=i+1 to s dofor j1:=1 to 4 dobegins2:=dist(a[i,i1*2-1],a[i,i1*2],a[j,j1*2-1],a[j,j1*2]);b[(i-1)*4+i1,(j-1)*4+j1]:=s2*t;b[(j-1)*4+j1,(i-1)*4+i1]:=s2*t;end;for k:=1 to s*4 dofor i:=1 to s*4 dofor j:=1 to s*4 doif (k<>i) and (i<>j) and (j<>k) thenif b[i,k]+b[k,j]<b[i,j] then b[i,j]:=b[i,k]+b[k,j];End;Beginreadln(s,t,p,q);for i:=1 to s dobeginreadln(a[i,1],a[i,2],a[i,3],a[i,4],a[i,5],a[i,6],a[i,9]);for x:=1 to 3 dofor y:=1 to 3 dofor z:=1 to 3 doif (x<>y) and (y<>z) and (x<>z) thenif (a[i,x*2-1]-a[i,z*2-1])*(a[i,x*2-1]-a[i,y*2-1])+(a[i,x*2]-a[i,z*2])*(a[i,x*2]-a[i,y*2])=0 then begin a[i,7]:=a[i,y*2-1]+a[i,z*2-1]-a[i,x*2-1]; a[i,8]:=a[i,y*2]+a[i,z*2]-a[i,x*2]; end;end;work;min:=1e38;for i:=(p-1)*4+1 to p*4 dofor j:=(q-1)*4+1 to q*4 doif (b[i,j]<>0) and (b[i,j]<min) then min:=b[i,j];if p=q then writeln('0.00') else writeln(min:0:2);End.3、P1349文化之旅有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种。
不同的文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家)国家可能有相同的文化。
不同文化的国家对其他文化的看法不同,有些文化会排斥外来文化。
(即如果他学习了某种文化,则他不能到达排斥这种文化的其他国家)现给定各个国家间的地理关系,各个国家的文化,每种文化对其他文化的看法,以及这位使者游历的起点和终点(在起点和终点也会学习当地的文化),国家间的道路距离,试求从起点到终点最少需走多少路。
【输入】第一行为五个整数N,K,M,S,T,每两个整数之间用一个空格隔开,依次代表,道路的条数,以及起国家个数(国家编号为1 到N),文化种数(文化编号为1 到K)点和终点的编号(保证S 不等于T);第二行为 N 个整数,每两个整数之间用一个空格隔开,其中第 i 个数 C i,表示国家 i的文化为C i。
接下来的K 行,每行K 个整数,每两个整数之间用一个空格隔开,记第i 行的第j个数为a ij,a ij= 1 表示文化i 排斥外来文化j(i 等于j 时表示排斥相同文化的外来,a ij= 0 表示不排斥(注意i 排斥j 并不保证j 一定也排斥i)。
人)接下来的M 行,每行三个整数u,v,d,每两个整数之间用一个空格隔开,表示国家u 与国家v 有一条距离为 d 的可双向通行的道路(保证u 不等于v,两个国家之。
间可能有多条道路)【输出】输出只有一行,一个整数,表示使者从起点国家到达终点国家最少需要走的距离数(如果无解则输出-1)。
【输入输出样例说明】由于到国家 2 必须要经过国家1,而国家 2 的文明却排斥国家 1 的文明,所以不可能到达国家2。
【输入输出样例说明】路线为1-> 2。
【数据范围】对于20%的数据,有2≤N≤8,K≤5;对于30%的数据,有2≤N≤10;K≤5;对于50%的数据,有2≤N≤20,K≤8;对于70%的数据,有2≤N≤100,K≤10;对于100%的数据,有2≤N≤100,1≤K≤100,1≤M≤N2,1≤k i≤K,1≤u, v≤N,1≤d≤1000,S≠T,1 ≤S, T≤N。
[算法分析]样例不具有代表性,因为只有一条路。
本题的实质是建图,求出从1到N的最短距离。
但里面有难点,文化排斥问题。
V[I,j]表示i到j的最短距离。
1、初始化:v[I,j]=maxin;2、根据输入的两点距离,进行图的校正。
这两点如果有文化排斥,则两点距离仍取maxin.两点的文化相同,两点距离仍取maxin.3、利用FLO算法,求出任意两点的最短距离。