汇编语言程序例题0001

合集下载

汇编语言程序设计习题答案

汇编语言程序设计习题答案

汇编语言程序设计习题答案第一章. 习题1.1用降幂法和除法将下列十进制数转换为二进制数和十六进制数:(1) 369 (2) 10000 (3) 4095 (4) 32767答:(1) 369=1 0111 0001B=171H(2) 10000=10 0111 0001 0000B=2710H(3) 4095=1111 1111 1111B=FFFH(4) 32767=111 1111 1111 1111B=7FFFH1.2将下列二进制数转换为十六进制数和十进制数:(1) 10 1101 (2) 1000 0000 (3) 1111 1111 1111 1111 (4) 1111 1111答:(1) 10 1101B=2DH=45(2) 1000 0000B=80H=128(3) 1111 1111 1111 1111B=FFFFH=65535(4) 1111 1111B=FFH=2551.3将下列十六进制数转换为二进制数和十进制数:(1) FA (2) 5B (3) FFFE (4) 1234答:(1) FAH=1111 1010B=250(2) 5BH=101 1011B=91(3) FFFEH=1111 1111 1111 1110B=65534(4) 1234H=1 0010 0011 0100B=46601.4完成下列十六进制数的运算,并转换为十进制数进行校核:(1) 3A+B7 (2) 1234+AF (3) ABCD-FE (4) 7AB×6F答:(1) 3A+B7H=F1H=241(2) 1234+AFH=12E3H=4835(3) ABCD-FEH=AACFH=43727(4) 7AB×6FH=35325H=2178931.5下列各数均为十进制数,请用8位二进制补码计算下列各题,并用十六进制数表示其运算结果。

(1) (-85)+76 (2) 85+(-76) (3) 85-76 (4) 85-(-76) (5) (-85)-76 (6) -85-(-76)答:(1) (-85)+76=1010 1011B+0100 1100B=1111 0111B=0F7H;CF=0;OF=0(2) 85+(-76)=0101 0101B+1011 0100B=0000 1001B=09H;CF=1;OF=0(3) 85-76=0101 0101B-0100 1100B=0101 0101B+1011 0100B=0000 1001B=09H;CF=0;OF=0(4) 85-(-76)=0101 0101B-1011 0100B=0101 0101B+0100 1100B=10100001B=0A1H;CF=0;OF=1(5) (-85)-76=1010 1011B-0100 1100B=1010 1011B+1011 0100B=0101 1111B=5FH;CF=0;OF=1(6) -85-(-76)=1010 1011B-1011 0100B=1010 1011B+0100 1100B=11110111B=0F7H;CF=0;OF=01.6下列各数为十六进制表示的8位二进制数,请说明当它们分别被看作是用补码表示的带符号数或无符号数时,它们所表示的十进制数是什么?(1) D8 (2) FF答:(1) D8H表示的带符号数为-40,D8H表示的无符号数为216;(2) FFH表示的带符号数为-1,FFH表示的无符号数为255。

武汉理工大学汇编语言试题(三套,内含答案,2012年期末考试绝大部分是从上面出的)

武汉理工大学汇编语言试题(三套,内含答案,2012年期末考试绝大部分是从上面出的)

武汉理⼯⼤学汇编语⾔试题(三套,内含答案,2012年期末考试绝⼤部分是从上⾯出的)《汇编语⾔程序设计》试卷模拟试卷⼀⼀、单项选择题(本⼤题共20⼩题,每⼩题1分,共20分)在每⼩题列出的四个选项中只有⼀个选项是符合题⽬要求的,请将正确选项前的字母填在题后的括号内。

1.⽤户为了解决⾃⼰的问题,⽤汇编语⾔所编写的程序,称为()A)⽬标程序B)源程序C)可执⾏程序D)汇编程序2.指令指针寄存器是()A)BP B)IP C)SP D)PSW3.当堆栈为空时,如SS=0805H,SP=40H,栈底字单元的物理地址是()A)08090H B)08089H C)0808EH D)08450H4.下⾯指令中,源操作数的寻址⽅式为⽴即寻址的是()A)MOV AX,OFFSET A B)MOV AX,AC)MOV AX,A+1 D)MOV AX,A[BX]5.下⾯各传送指令中,正确的是()A)MOV [DI],[SI] B)MOV [DX+DI],ALC)MOV AL,BX D)MOV WORD PTR [BX],0100H6.已知CS=2300H,DS=2400H,执⾏下列指令序列后,CS和DS值是()PUSH CSPOP DSA)CS=0 B)CS=2400H C)CS=2400H D)CS=2300H DS=2300H DS=2300H DS=2400H DS=2300H7.执⾏下⾯指令语句,则AX= ()MOV AL,95HCBWA)0095H B)0F95H C)0FF95H D)9095H8.当执⾏指令ADD AX,BX后,若AX的内容为2BA0H,设置的奇偶标志位PF=1,下⾯的叙述正确的是()A)表⽰结果中含1的个数为偶数B)表⽰结果中含1的个数为奇数C)表⽰该数为偶数D)表⽰结果中低⼋位含1的个数为偶数9.设AX=1000HNEG AXNOT AX执⾏上述指令后,正确的结果是()A)AX=1001H B)AX=0FFFH C)AX=1000H D)AX=0111H10.完成将累加器AL清零,并使进位标志CF清零,下⾯错误的指令是()A)MOV AL,00H B)AND AL,00H C)XOR AL,AL D)SUB AL,AL11.将CX寄存器低4位清零的正确指令是()A)AND CX,0F0H B)AND CX,0FFF0HC)AND CX,1110H D)MOV CX,012.执⾏后使BX=0的同时也使CF=0,OF=0的指令是()A)XOR BX,BX B)OR BX,BXC)AND BX,BX D)CMP BX,BX13.在串操作指令前使⽤重复前缀指令REPE,终⽌串的重复操作条件是()A)CX=0且ZF=0 B)CX=0且ZF=1C)CX=0或ZF=0 D)CX=0或ZF=114.条件转移指令JBE产⽣转移的条件是()A)CF=0 OR ZF=0 B)CF=0 OR ZF=1C)CF=1 OR ZF=0 D)CF=1 OR ZF=115.⽐较BX和SI中的两个存储器地址,若BX≥SI转向HIGH的正确指令是()A)JAE HIGH B)JBE HIGH C)JEG HIGH D)JLE HIGH16.循环指令Loop规定循环次数必定在寄存器()A)DX中B)DL中C)CX中D)CL中17.DEC WORD PTR[BX]指令中的操作数的数据类型是()A)字B)双字C)字节D)四字18.下⾯指令执⾏后,变量DAB中的内容是()DAW DW 2A05HDAB DB 0FAH:MOV AL,BYTE PRT DAWSUB DAB,ALA)0DAH B)0FAH C)0F5H D)0D0H19.使⽤汇编语⾔的伪操作命令定义()V AL DB 2 DUP(1,2,3 DUP(3),2 DUP(1,0))则在V AL存储区内前⼗个字节单元的数据是A)1,2,3,3,2,1,0,1,2,3 B)1,2,3,3,3,3,2,1,0,1C)2,1,2,3,3,2,1,0,2,1 D)1,2,3,3,3,1,0,1,0,120.设NUM=60H,表达式(NUM LT 60H AND 30)OR(NUM GE 60H AND 40)的值是()A)0 B)30H C)40 D)0FFFFH⼆、填空题(本⼤题共5⼩题,每空1分,共20分)1.INTEL 8088 管理的存储器空间最⼤容量为______________,I/O端⼝地址空间最⼤容量为_____________。

汇编语言部分作业题(含答案)

汇编语言部分作业题(含答案)

一、填空题1、编写一条宏指令CLRB,完成用空格符将一字符区中的字符取代的工作。

字符区首地址及其长度为变元。

宏定义如下:CLRB MACRO N, CFILMOV CX, ()CLDMOV ( ), ' ' ;;取空格符的ASCII码() DI, CFILREP ( )( )正确答案:第一空:n第二空:al第三空:LEA第四空:STOSB第五空:endm我的答案:得分: 6.6分第一空:N第二空:AL第三空:LEA第四空:STOSB第五空:ENDM2、某工厂计算周工资的方法是每小时的工资率RATE乘以工作时间HOUR,另外每工作满10小时加奖金3元,工资总数存放在WAG中。

请将周工资的计算编写成一条宏指令WAGES.宏定义如下:WAGES MACRO RATE, HOUR, WAGMOV (), HOUR ;;计算周工资(WAG),公式为:HOUR* RATEMOV BL, RATEMUL BLMOV WAG, AXMOV AL, HOUR ;;计算奖金存入(AX),公式为:HOUR/10的商*3MOV AH, 0MOV BL, 10DIV ()MOV BL, ()MUL ()ADD WAG, ();;计算周工资总数ENDM正确答案:第一空:al第二空:bl第三空:3第四空:BL第五空:AX我的答案:得分: 6.6分第一空:AL第二空:BL第三空:3第四空:BL第五空:AX3、下面的程序段是二进制到十六进制转换程序,请填空。

mov ch, 4 rotate: mov cl, 4rol bx,()mov al, bland al,()add al, 30h ; ’0’~’9’ ASCII 30H~39Hcmp al, 3ahjl printitadd al,() ; ’A’~’F’ ASCII 41H~46Hprintit: mov() , almov ah, 2int 21h()jnz rotate正确答案:第一空:cl第二空:0f;0fh第三空:7h;07h;07第四空:dl第五空:dec ch我的答案:得分: 6.6分第一空:cl第二空:0fh第三空:07h第四空:dl第五空:dec ch4、IRP BUF,<3,17,20,46,87,89,100> DB BUFENDM汇编后生成的代码等价于( )正确答案:第一空:DB 3,17,20,46,87,89,100我的答案:得分: 6.6分第一空:DB 3,17,20,46,87,89,1005、IRPC BUF,12345DB BUFendm汇编后的代码等价于:()正确答案:第一空:DB 1,2,3,4,5我的答案:得分: 6.6分第一空:DB 1,2,3,4,56、已知宏定义:FOO macro p1,p2,p3mov ax,p1p2,p3endm宏调用:FOO WORD_VAR,inc,ax则宏展开指令是( )( )正确答案:第一空:ov ax,WORD_VAR第二空:inc ax我的答案:得分: 7.6分第一空:mov ax,WORD_VAR第二空:inc ax7、已知宏定义:LEAP macro COND,LABJ&COND LABendm宏调用:LEAP Z,THERE则宏展开指令是()正确答案:第一空:JZ THERE我的答案:得分: 7.6分第一空:JZ THERE8、已知宏定义FO macro P1JMP TA&P1endm宏调用:FO WORD_VAR则宏展开结果是( )正确答案:第一空:JMP TAWORD_VAR我的答案:得分: 7.6分第一空:JMP TAWORD_VAR9、已知宏定义:MSGGEN macro LAB,NUM,XYZLAB&NUM db 'hello mr.&XYZ' endm宏调用:MSGGEN MSG,1,taylor则宏展开结果是( )正确答案:第一空:MSG1 db 'hello mr.taylor'我的答案:得分: 7.6分第一空:MSG1 db 'hello mr.taylor'10、MSG macro COUNT,STRINGMSG&COUNT db STRINGendmERRMSG macro TEXTCNTR=CNTR+1MSG %CNTR,TEXTendm宏调用:CNTR=0ERRMSG 'syntax error'则宏展开是( )正确答案:第一空:MSG1 db 'syntax error'我的答案:得分: 7.6分第一空:MSG1 db 'syntax error'11、下面的循环程序是利用逻辑尺来控制的,请填空。

_单片机-汇编语言程序设计例题

_单片机-汇编语言程序设计例题
MOV R1, #03 ; 计数值送R1
MOV R2, #0 ; 存放结果的高位清零 MOV A, @R0
MOV R3, A
LOOP: MOV A, R3 MOV B, #10
MUL AB MOV R3, A ; (R3)×10 的低 8 位送R3
MOV A, B
XCHA, R2 ; (R3)×10的高 8 位暂存R2
SUL2 : RET
程序如下:
SUBF : MOV A,R0 JZ ZERO
JB ACC.7 , NEG MOV R1, #1 SJMP ENDF
ZERO : MOV R1 , #0 SJMP ENDF
NEG : MOV R1 , #0FFH
ENDF : RET
例 4 比较两个无符号数的大小。
CLRA INCDPTR MOVC A, @A+DPTR; 查表得温度值低位字节 MOV23H, A
RET TAB: DW …
7 数制转换
例 16 将一个字节二进制数转换成 3 位非压缩型BCD码。 设一个 字节二进制数在内部RAM 40H单元, 转换结果放入内部 RAM 50H#, 51H, 52H单元中(高位在前), 程序如下:
程序如下: START: CJNE R0, #00H, SUL1 ; R0中的数与00比较不等转移
MOV R1, #00H; 相等, R1← 0
SJMP SUL2
SUL1: JC NEG ; 两数不等, 若(R0)<0, 转向NEG MOV R1, #01H ; (R0)>0, 则 R1←01H
SJMP SUL2 NEG : MOV R1, #0FFH ; (R0)<0, 则 R1←0FFH
MOVX @DPTR, A ; 存大数

《汇编语言程序设计》第1次作业

《汇编语言程序设计》第1次作业

一、单项选择题(只有一个选项正确,共10道小题)1.十进制数-100的8位二进制数的补码为()。

(A) 10011100(B)11100100(C) 11001110(D) 011001002.十六进制数88H,可表示成下面几种形式,请找出错误的表示()。

(A) 无符号十进制数136(B) 压缩型BCD码十进制数88(C) 8位二进制数-8的补码表示(D) 带符号十进制数-1203.指令MOV AX,[BX][SI]中源操作数采用的寻址方式是()。

(A) 寄存器(B) 基址变址(C) 寄存器间接(D) 寄存器相对4.下面有语法错误的指令是( )。

(A) ADD [BP+2],DA1(DA1是变量名)(B) ADD [BX+3],AL(C) ADD AL,AH(D) ADD AH,[DI]5.在DEBUG上机调试程序时,存储器地址表示为12FA:015F,它的物理地址是( )(A) 12FAH(B) 1305FH(C) 015FH(D) 130FFH6.下列指令中,执行后,不改变标志位ZF的是()。

(A) AND AL,AL(B) TEST AL,0FFH(C) CMP AL,BL(D) ROR AL,CL7.DATA SEGMENTDA1 DB 32 DUP(?)DA2 DW 1456H,789AHDA3 DW DA2DATA ENDS…MOV BX, DA3上述指令执行后,BX中的内容是( )。

(A) 0031H(B) 0032H(C) 0020H(D) 0021H8.完成将累加器AX清零,下面错误的指令是()。

(A) OR AX,00H(B) AND AX,00H(C) XOR AX,AX(D) SUB AX,AX9.数据段有如下数据定义VAR DB 4 DUP(1,5 DUP(?)),1,2执行指令MOV AL,SIZE VAR后AX寄存器的值是多少()。

(A) 4(B) 1(C) 5(D) 2010.内存中(2000H)=3000H,(3000H)=A01FH,MOV BX,[2000H]MOV AX,[BX]执行上述指令AX的内容是()。

汇编语言习题 (1)

汇编语言习题 (1)

第1章自测练习一、选择题(四选一)1.某个加法运算结果使标志ZF=1,则标志SF为。

A 0B 1C 不改变原来的状态D 不确定2.可以为存储器操作数提供偏移地址的寄存器组是。

A AX、BX、CX、DXB BX、BP、SI、DIC SP、IP、BP、DXD CS、DS、ES、SS3.8086/8088确定下一条执行指令物理地址的计算表达式为。

A DS× 16+EAB ES× 16+EAC SS×l6+SPD CS×l6+IP4.某系列微机对存储器分段,如果每个段最多的字存储单元(16位二进制)是32K,那么表示段内字节单元偏移地址的二进制位数应是位。

A 14B 15C 16D 205.十进制数-100的8位二进制数的补码为。

A 10011011B 01100100C 10011101D 100111006.下列各个8位二进制数的补码中,绝对值最大的是。

A 10001000B 11111110C 00000100D 000000017.16位有符号数的补码所表示的十进制数的范围是。

A -32767~+32768B -32768~+32767C -65535~+65536D 0~655358.对数值83A7H作逻辑非运算后的结果是——·A 83A8H B、73A8H C、7C59H D、7C58H9.指令“mov cx,[bp+16]”的源操作数采用的段寄存器是。

A CSB SSC DSD ES10.指向程序堆栈区的段寄存器是。

A CSB SSC DSD ES11.有效地址是指。

A 存储器操作数的物理地址B 存储器操作数的段地址C 存储器操作数的偏移地址D 立即数的偏移地址12.寄存器间接寻址方式中,操作数在中。

A 通用寄存器B 段寄存器C 主存单元D 堆栈13.指令“mov ax,es:[bx][si]”源操作数的物理地址是。

A 16×CS+BX+SIB 16×SS+BX+SIC 16×DS+BX+SID 16×ES+BX+S114.算术运算类指令的寻址和转移类指令的寻址,两者的不同之处是。

《汇编语言》作业和主要例题

《汇编语言》作业和主要例题

*教材:机械工业出版社主编《80x86汇编语言程序设计》第2版•马力妮CH1思考题:1-2、7-8、12、14【1.1】填空题(1)把汇编语言源程序转换为相应的目标程序的翻译程序称为(),这个翻译过程称为()。

(2)汇编语言源程序经()后,形成目标文件,再经()后,形成可执行文件。

(3)()是计算机中表示信息的最小单位,8位二进制数为一个(),而()是在操作中作为一个单元处理的一组数据。

(4)BCD码有两种存储方式:()和()。

(5)8位二进制的无符号数可表示的最大范围为()。

8位二进制的带符号数可表示的最大范围为()。

【1.2】选择题(1)下面各8位二进制数的补码中,绝对值对小的是()A. 01111111B. 10000001C. 01101101D.11111111(2)补码11001000表示的十进制真值是( )A. 200B. –200C. –56D. -184(3)16位带符号数所能表示的范围是( )A.–32767~+32768B.0~65535C.-65535~+65536D.-32768~+32767(4)与100.5不相等的数据是()A. 64.8HB. 1100100.1BC. 64.5HD. 144.4Q(5)将目标程序转换为可执行程序的是()A. 编辑程序B. 汇编程序C. 连接程序D.调试程序【1.7】将下列二进制数转换为十六进制数和十进制数。

(1)101011 B(2)11010011B (3)10110101B (4)1101100B【1.8】将下列十六进制数转换为二进制数和十进制数。

(1)2DH (2)1512H (3)1C5H (4)21F0H【1.12】将下列十进制数分别用组合型BCD码和非组合型BCD码表示。

(1)35 (2)74 (3)98 (4)14【1.14】有一个8位的数值00110101,回答问题:(1)如果它是一个二进制数,它表示的十进制数是多少?(2)如果它是BCD码,它表示的数是什么?(3)如果它是ASCII码,它表示的字符是什么?CH2思考题:1-3、6--9、11-12、16书面题:10、13-15【2.1】填空题(1)微型计算机硬件系统结构主要是由三部分组成,它们是()、()、()。

汇编语言程序设计试卷

汇编语言程序设计试卷

汇编语言程序设计试卷一. (共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] 中,操作数使用的段寄存器是。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

【例】试编写一程序计算以下表达式的值。

w = (v- (x * y + z -540 )) /x式中x、y、z、v均为有符号字数据。

设x、y、z、v的值存放在字变量X、Y、Z、V中,结果存放在双字变量W之中,程序的流程图如图所示。

DATA SEGMENTX DW 200Y DW 100Z DW 3000V DW 10000W DW 2 DUP (?)DATA ENDSSTACK SEGMENT STACKDB 200 DUP (0)STACK ENDSCODESEGMENTASSUME DS DATA CS: CODE SS: STACKSTART MOV AX DATAMOV DS AX ; DATA>AXMOV AX XIMUL Y ; (X) * (DX AXMOV CX AXMOV BX,DX ;(DX AX)TBX:CX)MOV AX,ZCWD ;(Z)符号扩展ADD CX,AXADC BX,DX;(BX: CX)+( DX:AX)BX:CX)SUB CX,540SBB BX,0 ;( BX:CX) - 5 40~BX:CX)MOV AX,VCWD ;(V)符号扩展SUB AX,CXSBB DX,BX ;( DX:AX)-((BX CX DX: AX)IDIV X ;( DX:AX)/XMOV W,AX ;商5MOV W+2 DX ;余数D©W+2MOV AH,4CHINT 21HCODEENDS ;退出DOS 状态END START【例】已知某班学生的英语成绩按学号(从 1 开始)从小到大的顺序排列在要查的学生的学号放在变量NO中,查表结果放在变量ENGLISH中。

编写程序如下: STACK SEGMENT STACKDB 200 DUP(0)STACK ENDSDATA SEGMENTTAB DB 80 ,85,86,71,79,96DB 83 ,56,32,66,78,84NO DB 10ENGLIST DB ?DATA ENDSCODE SEGMENTASSUME DS: DATA,SS: STACK,CS: CODEBEGIN: MOV AX,DATAMOV DS,AXLEA BX,TABMOV AL,NODEL ALXLAT TABMOV ENGLIS,H ALMOV AH,4CHINT 21HCODEENDSTAB表中,END BEGIN【例】已知在内存中有一个字节单元NUM存有带符号数据,要求计算出它的绝对值后, 放入RESULT^元中。

题目分析:根据数学中绝对值的概念知道,一个正数的绝对值是它本身,而一个负数的绝对值是它的相反数;要计算一个数的相反数,需要完成减法运算,即用0减去这个数。

8086/8088指令系统中有专门的求相反数的指令NEG初奶化 [柏X中的迥禅HX TJ A】一中DATA SEGMENTX DB -25RESULT DB ?DATA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODESTART: MOV AX,DATAMOV DS,AX ;初始化MOV AL,X ;X 取到AL 中TEST AL,80H ;测试AL 正负JZ NEXT ;为正,转NEXTNEG AL ;否则AL求补NEXT: MOV RESULT,AL ;送结果MOV AH,4CHINT 21H ;返回DOSCODE ENDSEND START【例】编写计算下面函数值的程序:1 X>0Y= 0 X=0-1 X<0设输入数据为X 、输出数据Y ,且皆为字节变量。

程序流程图如下图所示。

DATA SEGMENT X DB -25 Y DB ? DATA ENDS CODE SEGMENTASSUME CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AX ;初始化 MOV AL,X ;X 取到AL 中CMP AL,0 ; Al中内容和0比较JGE BIG ;大于等于0,转BIG MOV BL,-1 ;否则为负数,—1送BL JMP EXIT;转到结束位置 BIG: JE EE ; Al中内容是否为0,为0转EEMOV BL,1;否则为大于0, 1送BLJMP EXIT;转到结束位置 EE:MOV3L,0 ; 0 送 BL EXIT: MOV Y,BL;BL 中内容送Y 单元MOV AH,4CHINT 21H ;程序结束CODE ENDSEND START;汇编结束 【例】试编一程序,求三个带符号字数据中的最大值,并将最大值存入例程忌沆尸国MAX 字单元中。

设三个带符号数分别在三个字变量X、Y、Z 中存储。

程序流程图如下图所示STACK SEGMENT STACKDB 200 DUP (0)STACK ENDSDATA SEGMENTX DW 00ABHY DW - 5Z DW 200MAX DW ?DATA ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODESTART :MOV AX,DATAMOV DS,AXMOV AX,XCMP AX , Y ; X> Y?JG L1MOV AX ,Y ;Y> Z?CMP AX ,ZJG EXITL2:MOV AX,ZJMP EXITL1:CMP AX,Z ;X> Z?JLE L2EXIT: MOV MAX AXMOV AH, 4CHINT 21HCODE ENDSEND START【例】设某程序有8路分支,试根据给定的N值(1~8),将程序的执行转移到其中的一路分支。

程序流程如图下所示。

DATA SEGMENTTAB DW P1, P2, P3, P4, P5, P6, P7, P8N DB 5DATA ENDSSTACK SEGMENTDB 200 DUP (0)STACK ENDSCODE SEGMENTASSUME DS : DATA SS: STACK CS CODESTART MOV AX DATAMOV DS AXMOVAL NDEL ALADD AL, ALMOV BL ALMOVBH 0JMP TAB[BX]P1:JMP EXITP2: ……JMP EXIT P2: ……JMP EXIT P3: ……JMP EXITP8: ……EXIT:1MOV AH 4CHINT 21HCODE ENDSEND START【例】已知有几个元素存放在以BUF为首址的字节存贮区中,试统计其中正元素的个数。

显然,每个元素为一个8位有符号二进制数,统计其中正元素的个数可用循环程序实现。

其程序流程图如下图所示。

例】编写程序完成求1+ 2 + 3+……N的累加和,直到累加和超过1000为止。

统计被累加的自然数的个数送CN单元,累加和送SUM流程图如下图所示。

DATA SEGMENT SUM DW ? CN DW ?DATA ENDS CODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AX ;初始化 MOV AX,0; 0 送 AXMOV BX,0 ; 0 送 BXLP:INC BX; BX 加 1ADD AX,BX ;求累加和CMP AX,1000 ;比较 JBE LP; <1000 转MOV SUM,AX MOV CN,BX ;送结果MOV AH,4CH INT 21H;返回 DOS CODE ENDSEND START;汇编结束【例】在以BUF 为首址的字存储区中存放有 N 个有符号数, 在BUF 存储区中,试编写其程序。

现需将它们按大到小的顺序排列 例化K f?序说程囲我们采用冒泡排序算法从第一个数开始依次对相邻两个数进行比较, 如次序对,则不交换两数位置;如次序不对则使这两个数交换位置。

可以看出,第一遍需比较( N-1 )次,此时,最小的数已经放到了最后; 第二遍比较只需考虑剩下的 (N-1)个数,即只需比较(N-2)次; 第三遍只需比较(N-3)次,……整个排序过程最多需( N-1 )遍。

如下面的4个数即是采用冒泡排序比较的例子。

数10 816 90 32第一遍 1016 90 32 8第二遍 16 90 32 10 8 第三遍 90 32 16 10 8 程序流程图如图所示。

S45視厚法租图」DATASEGMENTBUF DW 3, -4 , 6, 7, 9, 2, 0, -8 , -9 , -10 , 20 N= ($ -BUF ) /2 DATAENDSSTACK SEGNMENT STACK DB 200 DUP (0) STACK ENDS CODESEGMENTtcK 1? -Dy. 0 - E 乩(CK) -1- CXASSUME CS:COD,E DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV CX,NDEC CXLOOP1:MOV DX,CXMOV BX,0LOOP2:MOV AX,BUF[BX]CMP AX,BUF[BX+2]JGE LXCHG AX,BUF[BX+2]MOV BUF[BX],AXL:ADD BX,2DEC CXJNE LOOP2MOV CX,DXLOOP LOOP1MOV AH,4CHINT 21HCOD E NDSEND START程序运行后,BUF区中的内容如下:20 ,9,7,6 ,3 ,2,0 ,-4 ,-8 ,-9 ,-10若要对N个无符号数按由大到小的顺序排列,只需将指令“ JGE L”改为“ JAE L”即可。

【例】将一个给定的二进制数按位转换成相应的ASCII 码字符串,送到指定的存储单元并显示。

如二进制数转换成字符串为‘'。

要求将转换过程写成子程序,且子程序应具有较好的通用性,而必须能实现对8倍和16 倍二进制数的转换。

入口参数:DX存放待转换的二进制数CX存放待转换数的位数(8位或16位)DI 存放ASCII 码首地址出口参数:转换后的字符串存放在以DI 作指针的字节存贮区中程序清单:DATASEGMENTNUM8 DB 93HNUM16 DW 0ABCDHASCBUF DB 20 DUP(0)DATAENDSCODESEGMENTASSUME DS:DATA,CS:CODE,SS:STACK START:MOV AX,DATAMOV DS,AXMOV DX,0MOV DL,NUM8 ;转换二进制数送DXMOV CX,8 ;置位数8LEA DI , ASCBUF ;字符串首址DICALL BTASC ;调用子程序BTASCMOV [DI] ,BYTE PTR 0DH MOV [DI+1] ,BYTE PTR 0AH MOV[DI+2] ,BYTE PTR ‘$' LEA DX,ASCBUFMOV AH,9INT 21HMOV DX,NUM16MOV CX,16 ;置位数16LEA DI,ASCBUF CALL BTASCMOV [DL] ,BYTE PTR 0DH MOV [DL+1],BYTE PTR 0AH MOV [DL+2],BYTE PTR ‘$';LEA DX,ASCBUF显示转换后的字符串MOV AH,9INT 21HBTASC PROCPUSH AX ;保存AXMOV AL,0 CMP CX,8 ;比较8 位数JNE L1 ;直接转换16 位数MOV DH,DL ; 8 位数转换送DHL1 : ROL DX,, 1 ; DX最高位移入CFRCL AL, 1 ; CF移入AL最低位ADD AL, 30HMOV [DI] , ALINC DI LOOP L1 POP AXRETBTASC ENDP COD E NDS END START。

相关文档
最新文档