版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章微型计算机概论
1.12以下十进制数对于的八位二进制补码是怎样表示的?
(1)102
[102]补=01100110B
(2)34
[34]补=00100010B
(3)96
[96]补=01100000B
(4)-100
[TOO]原=11100100B
[-100]反=10011011B
[TOO]补=10011100B
(5)-64
[-64]原=UOOOOOOB
[-64]反=10111111B
[-64]补=11000000B
(6)0
[0]补二00000000B
1.14为什么我们会用16进制表示数据?请将下列十进制数转换成对应的十六进制数。
(1)354=162H
(2)102=6611
(3)64=40H
(4)256=10011
(5)127=7FH
(6)32=20H
(7)135=87H
(8)67:43H
1.15现有如下十进制数,将其转换成对应的二进制数。
(1)34.5=10010.1B
(2)20.125=10100.001B
(3)17.12=10001.0001B
(4)100.4=1100100.01B
(5)50.05=110010.00001B
(6)19.3=10011.01B
1.16将下列十六进制数表示成二进制数。
(1)OFFH=11111111B
(2)3411=00110100B
(3)67H=01100111B
(4)4EH=01001110B
(5)90H=1001OOOOB
(6)4DH=010011O1B
(7)5AH=01011O1OB
1.17请写出以下补码表示的二进制数真值。
[X]补=1000000000000000B
X=-32768
[Y]补=1111111111111111B
[Y]反=1111111111111110B
[Y]原=1000000000000001B
Y=-l
[z]补=ommimiHUB
Z=32767
[W]#=llll000000000000B
[w]反=1110mimiHUB
[W]原=100100000000OOOOB
■'=-4096
[Q]补=010000000000OOOOB
Q=16384
[P]补=1000000000000001B
[P]反=100000000000OOOOB
[p]原=immimiHUB
P=-32767
1.20请判断以下八位二进制数补码运算是否会产生溢出,或者产生进位,为什么?
(1)-23+78
[-23]补+[78]补=£9H+4EH=(1)37H
无溢出,有进位
(2)-45-92
[-45]补+[-92]补=口3旭4H=(1)77H
有溢出,有进位
(3)89+30
[89]补+[30]补=59H+1EH=77H
无溢出,无进位
(4)78-52
[78]补+[-52]补=4EH+CCH=(1)1AH
无溢出,有进位
(5)83-(-30)
[83]补+[30]补=53H+1EH=71H
无溢出,无进位
(6)126-(-34)
[126]#+[34]补=7EH+22H=A0H
有溢出,无进位
(7)108+34
[108]补+[34]补=6CH+22H=8EH
有溢出,无进位
1.22设有X=80H,Y=79H,Z=88H,在下述情况下比较三个数的大小。
(1)三数均为无符号数
Y<X<Z
(2)三数均为有符号数(补码)
[X]补=10000000B
X=-10000000B(负数)
[Y]补=01111001B
Y=01111001B(正数)
[Z]补=10001000B
[Z]反=10000111B
[Z]原=11111000B
Z=-01111000B(负数)
X<Z<Y
(3)三数均为压缩BCD码
X=80
Y=79
Z=88
Y<X<Z
(4)三数均为有符号数(移码)
[X]移=10000000B
X=[X]移-01111111B=OOOO000IB(正数)
[Y]移=01111001B
Y=[Y]移-01111111B=-OOOO0110(负数)
[Z]移=10001000B
Z=[Z]移-01111111B=OOOO1001(正数)
Y<X<Z
第三章指令
3.2什么是机器码?什么是助记符?什么是操作码?什么是操作数?不同指令的机器码字
节数都相同吗?
3.3什么是寻址?什么是寻址方式?操作数可能在哪些地方?对应的操作数名称和寻址方
式名称分别是什么?
3.416位操作数在存储器中存放的规则是什么?什么叫“低对低、高对高”?
3.7指令中寻址存储器操作数使用物理地址还是逻辑地址?逻辑地址转换成物理地址的算
法是什么?在指令中要确定一个存储器操作数应该提供哪三种信息?
3.8写出存储器寻址方式中有效地址EA的通式。简单归纳段寄存器的默认规则。
解:3.2:机器码:它指的是将硬件序列号经过一系列加密、散列形成的一串序列号,即使
指令的二进制编码。
助记符:是便于人们记忆、并能描述指令功能和指令操作数的符号
操作码:组成机器指令的一部分用来说明指令的性质和功能。
操作数:用来说明操作的对象。可以是具体的数值、寄存器或存储器地址。
不同指令的机器码字节数不一样。
3.3:寻址:寻找操作数会操作数的地址
寻址方式:寻找操作数地址的方法即为寻址方式。
对应的操作数名称和寻址方式名称见下表:
操作数的位置操作数名称寻址方式名称
在指令中立即数立即寻址
在寄存器中寄存器操作数寄存器寻址
在存储器中存储器操作数存储器寻址
在I/O端口中I/O操作数I/O端口寻址
3.4:16位操作数在存储器中存放的规则是:低字节在低地址中,高字节在高地址中,即所
谓的低对低、高对高。
3.7指令中寻址存储器操作数使用的是逻辑地址。
逻辑地址转换成物理地址的算法是:段地址乂16+偏移地址=物理地址
在指令中要确定一个存储器操作数要提供三种信息:段地址、偏移地址和数据类型。
3.8存储器寻址方式中有效地址EA的通式:
EA=()基址+()地址+DISP偏移量
段寄存器的默认规则:如果有效地址的表达式中有基址寄存器BP则默认堆栈段SS,其他一
律默认数据段DS„
3.9设段寄存器DS=1000H,SS=2000H,ES=3000H,通用寄存器BX=4000H,BP=5000H,SI=6000H,
DI=70000H»在下列各指令中指出存储器操作数的寻址方式,求出有效地址EA、物理地址PA、
并分别用物理地址和逻辑地址说明指令执行结果。
(1)MOVCX,[2300H]
(2)MOVBYTEPTR[BX],8FH
(3)MOVDH,[BP+3000H]
(4)MOVES:[SI+1210H],AX
(5)MOV[BX+DI+50H],AX
(6)INCWORDPTR[BX+SI]
解:⑴MOVCX,[2300H]直接寻址;
数据段中偏移地址为2300H所对应的字送CX中。
有效地址EA=2300H,物理地址PA=DS*16+EA=10000H+2300H=12300H
执行结果:(12300H)-CL,(12301H)-CH
(2)MOVBYTEPTR[BX],8FH寄存器间接寻址;
立即数8FH,送入数据段偏移地址为BX所对应的字节中。
有效地址EA=BX=4000II,物理地址PA=DS*16+EA=10000II+4000H=14000H
执行结果:8FH-(14000H)
(3)MOVDH,[BP+3000H]基址寻址;
数据段中偏移地址为BP内容与3000H之和所对应的字节送至DH
有效地址EA=BP+30001l=8000II
物理地址PA=SS*16+EA=20000H+8000H=28000H
执行结果:(28000ID-DH
(4)MOVES:[SI+1210H],AX变址寻址;
AX内容送入数据段中偏移地址SI与1210H之和所对应的字中
有效地址EA=S1+1210H=6000H+1210H=721OH
物理地址PA=ES*16+EA=3000II*16+7210H=37210II
执行结果:AL^(3721OH),AH^(372UH)
(5)MOV[BX+DI+50H],AX基址变址寻址;
AX内容送入数据段中偏移地址为BX内容与DI内容及50H内容之和所对应的字节
中
有效地址EA=BX+DI+50H=4000H+70000H+50H=74050H
物理地址PA=DS*16+EA=1000II*16+74050H=84050H
执行结果:AL-(84050H)
(6)INCWORDPTR[BX+SI]基址变址寻址;
堆栈中偏移地址为BX内容与SI内容所对应的字加1
有效地址EA=BX+SI=4000H+6000H=A000H
物理地址PA=DS*16+EA=1000H*16+A000H=1AOOOH
执行结果:1A000H中存放的字的值加1
3.10分别说明指令MOVAX,2000H和指令MOVAX,[200011]以及指令MOVAX,BX和指令MOV
AX,[BX]的区别。
解:MOVAX,2000H将立即数2000H送入寄存器AX
MOVAX,[2000H]将数据段中偏移地址为2000H的数据送入AX;
MOVAX,BX将寄存器BX操作数传入AX
MOVAX,[BX]将数据段中偏移地址为BX的内容所对应的字送入AX
3.11指出下列指令中源操作数的寻址方式。
(1)MOVBL,0F9H
(2)ADD[BX],SI
(3)SUBCL,[400011]
(4)CMPDX,[SI]
(5)ANDAL,[BX+1]
(6)ORBP,[DI+21OOH]
(7)XORAX,[BP+SI]
(8)MOVCX,300
解:(1)MOVBL,0F9H立即寻址
(2)ADD[BX],SI寄存器寻址寻址
(3)SUBCL,[400011]直接寻址
(4)CMPDX,[SI]寄存器间接寻址
(5)ANDAL,[BX+1]基址寻址
(6)ORBP,[DI+21OOH]变址寻址
(7)XORAX,[BP+SI]基址变址寻址
(8)MOVCX,300立即寻址
3.12下列指令都是非法的,指出各指令错在哪里?
(1)MOVSI,AH
(2)MOV70H,BL
(3)MOVCX.F123I1
(4)MOV[BX],6AH
(5)MOVES,5000H
(6)MOV[DI],[3000H]
(7)MOVDS,SS
(8)MOVCS,AX
(9)MOVAL,[CX]
(10)MOV[BX+BP],DX
(11)MOVBI1,[SI+DI+2]
(12)PUSHAL
(13)LEAAX.BX
(14)LDSBL,[5100H]
(15)INAH,DX
(16)OUT288H,AL
(17)ADD[240011],1234H
(18)XOR[2500R],[BX+10H]
(19)INC[SI]
(20)MUL10
(21)IDIV[BP+DI+1300H]
(22)SALAL,2
解:(1)MOVSI,AH两个操作数字长不一致
(2)MOV70H,BL立即数不能做目的操作数
(3)MOVCX,F123H十六进制的数以字母打头时前必须补0
(4)MOV[BX],6AH两个操作数的字长不确定
(5)MOVES,500011立即数不能直接送段寄存器
(6)MOV[DI],[3000H]两个操作数不能存储器操作数
(7)MOVDS,SS段寄存器不可相互传送数据
(8)MOVCS,AXCS不能做目的操作数
(9)MOVAL,[CX]CX不能用作寄存器间接寻址
(10)MOV[BX+BP],DX存储器寻址方式中表示有效地址不能同时为两个基址寄存器
(11)MOVBH,[SI+DI+2]存储器寻址方式中表示有效地址不能同时为两个变址寄存器
(12)PUSHAL入栈出栈操作必须以字为单位,AL应为AX
(13)LEAAX,BXLEA指令中源操作数必须为存储器寻址方式应为[BX]
(14)LDSBL,[5100H]LDS指令中目的操作数必须为16位的通用寄存器
(15)INAH,DXIN指令中的目的操作数只能是AL或AX
(16)OUT288H,AL输入输出指令中端口地址应为16位,必须先送给DX;应为
MOVDX,288HOUTDX,AL
(17)ADD[2400H],1234H两个操作数的字长不确定
(18)XOR[2500R],[BX+1OH]两个操作数不能同时为内存操作数
(19)INC[SI]操作数的字长不确定
(20)MUL10MUL指令的操作数不能为立即数
(21)IDIV[BP+DI+1300H]操作数的字长不确定
(22)SALAL,2移位次数大于1时必须先送给CL
3.13将寄存器AH、BH、CH和数据段中偏移地址为2100H,210111,2102H的3个字节单元内
容都置数AOH,最后将寄存器DL的内容与偏移地址为2103H的字节单元内容互换。试编写
程序。
解:DEBUG-A
MOVAH,0A0
MOVBH,0A0
MOVCH,0A0
MOV[2100H],AH
MOV[2101H],BH
MOV[2102H],CH
XC1IGDL,[2103]
3.14设SP=2000H,AX=3000II,BX=5000H,执行以下3条指令后,问SP=?AX=?BX=?
PUSHAX
PUSHBX
POPAX
解:指令执行的结果应为SP=2000II-2II-2H+2n=lFFEH
AX=5000H,BX=5000H
3.15说明指令LEASI,[BX]与指令MOVSI,[BX]的区别。
解:LEASI,[BX]是地址传送指令,将BX的有效地址取至16位SI寄存器中。这里取的是操
作数的地址。
MOVSI,[BX]是寄存器间接寻址,数据段中偏移地址为BX内容所对应的字送SI中。取
的是操作数。
3.16下列程序执行完后,AX=?BX=?CX=?
MOVAX,1122H
MOVBX,334411
PUSHAX
POPCX
XCHGBX,CX
LEACX,[BX]
解:AX=1122HBX=1122HCX=1122H
3.17CPU分别执行下列各段程序后,写出各个执行结果的状态标志位OF,SF,ZF,AF,PF,
CF的值。
(1)MOVAL,7AH
ADDAL,53H
(2)MOVBL,OAFH
ADDBL,OEAH
(3)MOVCL,OFFI1
ADDCL,O1H
(4)MOVDL,4911
SUBDL,OCAH
解:⑴MOVAL,7AH
ADDAL,53H
74H+53H=01110100+01010011=11000111B
OF=1,SF=1,ZF=O,AF=O,PF=O,CF=O
(2)MOVBL,OAFH
ADDBL,OEAH
AFH+EAH=10101111+11101010=10011001B
0F=0,SF=1,ZF=O,AF=1,PF=1,CF=1
(3)MOVCL,OFFH
ADDCL,01H
FFH+O1H=11111111+00000001=00000000B
0F=0,SF=O,ZF=1,AF=1,PF=1,CF=1
(4)MOVDL,49H
SUBDL,OCAH
49H-CAH=01001001-11001010=01111111B
0F=0,SF=O,ZF=O,AF=1,PF=1,CF=1
3.18有两个32位的二进制数,分别存放在两个16为寄存器CX:DX和两个16位寄存器SI:
DI中,求两数之和,并将和放在两个16位寄存器AXBX中,即AX:BXCX:DX+SLDI。
试编写程序。
解:《设两个32位数分别为1234567823456789
DEBUG
-A
MOVCX=1234
MOVDX=5678
MOVDI=6789
MOVSI=2345
ADDDX,DI
ADCCX,SI
MOVBX,DX
MOVAX,CX
3.21分别说明下面两条乘法指令中被乘数、乘数、积所在的位置。
(1)MULBL
(2)IMULBX
解:(1)被乘数在AL中,乘数在指令中给出的8位操作数BL中,乘积在AX中。
(2)被乘数在AX中,乘数在指令中给出的16位操作数BX中,乘积在AX中。
3.22若AL=86H,BL=22H,分别执行指令MUL和IMUL后,其结果是多少?OF二?CF=?
解:AL=86H执行MUL指令后OF=1、CF=1
执行IMUL指令后OF=1>CF=1
BL二22H执行MUL指令后OF=1、CF=1
执行IMUL指令后0F=0、CF=O
3.23分别说明下面两条除法指令中被除数、除数、商、余数所在的位置。
(1)DIVCX
(2)IDIVCL
解:(1)AX内容除以16位操作数CX结果的商放入AX余数放入DX中。
(2)AX内容除以8位操作数CL结果的商放入AL余数放入AH中。
3.24分别写出CPU执行下面两程序后,寄存器DX=?AX=?
(1)MOVAL,7FII
CBW
CWD
(2)MOVAL,80H
CBW
CWD
解:⑴DX=0000AX=007F
(2)DX=OOOOAX=FF80
3.25分别写出CPU执行下面两段程序后,寄存器AL二?标志CF=?
(1)MOVAL,36H
ADDAL,58H
DAA
(2)MOVAL,49H
ADDAL,87H
DAA
解:(1)36H+58H=8EH,由于低4位大于9,需要修正,AL=8EH+6H=94H寄存器AL=94H标志
寄存器CF=O
(2)49H+87H=D0H,AF=1,由于高4位大于9,需要修正,AL=D0H+66H=36H,CF=1
3.26设AX和CX中存放着两个4位的压缩型BCD码,求两数之和,并将和放在AX中。试编
写程序。
解:ADDAL,BL
DAA
MOVCL,AL
MOVAL,AH
ADCAL,BH
DAA
MOVAH,AL
MOVAL,CL
3.27分别写出CPU执行下面两段程序后,寄存器AX=?标志CF二?
(1)MOVAX,O138H
ADDAL,35H
AAA
(2)MOVAX,0533H
ADDAL,34H
AAA
解:(1)AX=0230H,CF=1
(2)AX=0507H,CF=O
3.28下列程序执行完后,AX=?CF二?
MOVAX,3649H
ADDAL,AH
DAA
CBW
INCAH
ADCAL,17H
AAA
解:AX=0102H,CF=1
3.29有如下程序段
MOVAL,45H
ADDAL,71H
DAA
MOVBL,AL
ADCAL,19H
DAA
MOVBH,AL
问,执行完此程序后,BX=3616,标志位PF=1,CF=0.
3.30分别只使用一条指令实现下述各功能。
(1)使AL的低四位清0,高四位不变;
(2)使DI的高10位清0,低6位不变;
(3)使BL的低4位置1,高四位不变;
(4)使SI的高2位置1,低14位不变;
(5)使CL中的D2、D3、D4、D5、D6位取反,DO、DI、D7位不变;
(6)使BP的高4位取反,低12位不变。
解:(1)ANDAL,OFOH
(2)ANDDI,003FH
(3)ORBL,OFH
(4)ORSI,OCOOOH
(5)XORCL,7CH
(6)XORBP,OFOOOH
3.31编写程序实现:使寄存器SI的高5位置1,低5位清0,中间6位取反。
解:ORSI,0F800H
ANDSI,OFFEOI1
XORSI,07E0H
3.32写出用一条指令使AX清0的一些指令。
解:MOVAX,0
XORAX,AX
SUBAX,AX
ANDAX,0
3.34用最少的指令实现下述功能。
(1)使AL的低4位移到高4位,低4位清0;
(2)使AU的高4位移到低4位,高4位清0.
解:⑴MOVCL,4
SULAL,CL
(2)MOVCL,4
SHRAL,CL
3.35用移位指令实现如下功能。
(1)将CL中的无符号数乘2;
(2)将BX中的带符号数除以4;
(3)将DX中的无符号数除以8.
解:(1)SARCL,1
(2)MOVCL,2
SARBX,CL
(3)MOVCL,4
SHRDX,4
3.37编程实现如下功能。
(1)将AL的低6位移到高6位,高2位移到低2位;
(2)将BL的高6位移到低6位,低2位移到高2位;
(3)将BH的高4位与低4位变换;
(4)将BP的高8位与低8位变换。
解:(1)MOVCL,2
ROLAL,CL
(2)MOVCL,2
RORBL,CL
(3)MOVCL,4
RORBH,CL
(4)MOVCL,8
RORBP,CL
3.39设AX=123仙,CX=9602H,下列程序执行完后,AL=?
ANDAL,AH
SHLAL,CL
ORAL,CH
SARAL,XL
XORAL,CL
RCLAL,
解:ANDAL,AHAL=10H
SHLAL,CLCL=40H
ORAL,CHAL=0D6H
SARAL,XLAL=0F5H
XORAL,CLAL=0F7II
RCLAL,AL-OEE
最后结果:AL=OEEH
3.52比较AX和BX中两个无符号数的大小,若AX>BX,则将SI中的高8位和低8位交换;
若AX二BX,则将SI中的高7位置1;若AXVBX,则将SI中的带符号数除以2。试编写程序。
CODESEGMENT
ASSUMECS:CODE
START:CMPAX,BX
JZAl;若AX=BX,转移到Al
JBA2;若AX〈BX,转移到A2
MOVCL,8;交换SI中高8位和低8位
ROLSI,CL
JMPNEXT
Al:ORSI,OFEOOH;将SI中的高7位置1
JMPNEXT
A2:MOVCX,2;将SI中的带符号数除以2
MOVAX,SI;将被除数送给DX:AX
MOVDX,0
IDP/ex
MOVSI,AX;将所求结果送回$1
NEXT:MOVAll,4CH
INT21H
CODEENDS
ENDSTART
3.53在以DS:3301H为首地址的存储单元中,连续存放了50个无符号的字节数据,要求在
其中找出最小值,并将它放在地址为DS:3300H的字节单元中。试编写程序。
CODESEGMENT
ASSUMECS:CODE
START:MOVSI,3301H;将首地址送给$1,用SI可以间接访问数组中的元素
MOVAL,[SI];将第一个数送给AL
MOVCX,49;50个数比较49次
CYCLE:INCSI;让SI指向下一个数
CMPAL,[SI]
JBENEXT;AL<=[SI],则判断下一个数
MOVAL,[SI];AL>[SI],则用[S1]取代AL
NEXT:LOOPCYCLE
MOVDS:[3300H],AL;编译器会认为[3300H]就是3300H,故在前面加DS:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3.58编写将内存以ES:1000H开始的256个字节单元清零的程序。
CODESEGMENT
ASSUMECS:CODE
START:MOVSI,1000H
MOVCX,256
CYCLE:MOV[SI],BYTEPTR0
INCSI
LOOPCYCLE
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
用串操作指令实现:
CODESEGMENT
ASSUMECS:CODE
START:MOVDI,1000H;给目的串首地址赋初值
MOVAL,0;用0来初始化
MOVCX,256;循环256次
CLD;地址从小到大变化
REPSTOSB;用AL中的值对指定的目的串初始化
MOVAll,4CH
INT21H
CODEENDS
ENDSTART
3.59试编写程序,统计以DS:8000H为起始地址的连续200个字节单元中的0的个数。
CODESEGMENT
ASSUMECS:CODE
START:MOVAX,0;用AX统计0的个数
MOVCX,200;循环200次
MOVSL8000H;通过SI间接访问内存DS:800011开始的存储单元
CYCLE:CMPBYTEPTR[SI],0
JNZNEXT
INCAX
NEXT:INCSI
LOOPCYCLE
MOVAH,4CII
INT21H
CODEENDS
EM)START
第四章汇编
4.5程序中数据定义如下:
DATA1DW?
DATA2DB32DUP(?)
DATA3DD?
DLENGTHEQU$-DATAl
试问DLENGTH的值是多少?
DLENGTH=38
4.6在某程序中需要为一个变量BUF预留500个字节的存储空间,请写出相应的指令,如果
要预留500个字的存储空间呢?
BUFDB500DUP(?)
BUFDW500DUP(?)
4.7程序中数据定义如下:
BUFFERBDB'ABCDEF'
RESULTDB?
BUFFERWDW30DUP(?)
写出以下指令的执行结果:
MOVAX,TYPERESULT;AX=1
MOVBX,TYPEBUFFERW;BX=2
MOVCX,LENGTHBUFFERB;CX=1
MOVDX,LENGTHBUFFERW;DX=30
MOVAX,SIZERESULT;AX=1
MOVBX,SIZEBUFFERW;BX=60
4.11设BX=1103H,则执行下列指令后AX和CX各为多少?若BX=03H,则结果又如何?
MOVAX,BXANDOFFH
MOVCX,BXEQ1103H
BX=1103H
AX=0003H,CX=OFFFFH
BX=03H
AX=0003H,CX=O
4.13两个ASCH码数串定义如下:
STR1DB'352678’
STR2DB‘123400’
编写程序段,计算STR1+STR2,要求结果仍然是ASCH码串。
DATASEGMENT
STR1DB'352678,
STR2DB'123400'
STRDB6DUP(?)
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
LEASI,STRl+5;$1指向指RI的最后一个元素
LEADLSTR2+5;DI指向STR2的最后一个元素
LEABX,STR+5;BX指向STR的最后一个元素
MOVCX,6;循环6次
CLC;初始认为最低位没有进位
CYCLE:MOVAL,[SI]
MOVAH,[DI]
ADCAL,AH;将对应的两个ASCH码相加
AAA修正,仅仅取运算结果的低4位
RCRDX,1;保护进位标志
ORAL,30H;将所有的数值转换为对应的ASCII码
SHLDX,1;恢复进位标志
MOV[BX],AL;将所求的ASCII码送给STR的相应元素
DECSI;SI指向前一个数
DECDI
DECBX
LOOfCYCLE
MOVAll,4CH
INT21H
CODEENDS
ENDSTART
4.14下面程序段是实现从键盘输入10个一位十进制数累加。最后累加和以非压缩BCD码形
式存放在AH(高位)和AL(低位)中。试把程序段中所空缺的指令填上。
XORBX,BX
MOVCX,10
LOP:MOVAH,01H;键盘字符输入
INT21H
SUBAL,30H
MOVDL,AL
MOVAX,BX
ADDAL,DL
AAA
MOVBX,AX
LOOPLOP
4.18将内存中某数据块的正数和负数分开,并分别将这些正数和负数送同一数据段的两个
缓冲区中,并在屏幕上显示正数和负数的个数。
DATASEGMENT
BUFDB12,15,-2,3,-7,-8,19,-25
N=$-BUF
BUF]DBNDUP(?);存放正数
BUF2DBNDUP(?);存放负数
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DSDATA
START:MOVAX,DATA
MOVDS,AX
LEABX,BlJF;BX指向BUF
LEASI,BUF1;SI指向存放正数的缓冲区BUF1
LEADI,BUF2;01指向存放负数的缓冲区BUF2
MOVCX,N;循环N次
MOVDX,0;DH表示负数的个数,DL表示正数的个数,都清零
CYCLE:MOVAL,[BX];将!^指向的数送给AL
CMPAL,0;比较AL与0的大小
JGGREAT;AL>0,则转移至GREAT
MOV[DI],AL;AL<=0,将AL存入负数的数组
INCDll;负数的个数加1
INCDI;D1指向下一个负数
JMPNEXT
GREAT:MOV[SI],AL:AL>0,将AL存入正数的数组
INCDL;正数的个数加1
INCSI;SI指向下一个负数
NEXT:INCBX;判断下一个数
LOOPCYCLE
ADDDL,30H;将正数的个数变成字符输出
MOVAH,2
INT2111
ADDDH,30H;将负数的个数变成字符输出
MOVDL,Dll
MOV
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026浙江宁波前湾新区招聘事业编制教师(第四批)24人备考题库参考答案详解
- 2026河南郑州管城区紫东路社区卫生服务中心招聘3人备考题库含答案详解(培优a卷)
- 生态风险评价中数学模型的原理应用与展望:基于多领域案例的深度剖析
- 生态视域下虚拟学习社区的构建与实践探索
- 2026广东佛山南海区狮城中学招聘初中历史教师1人备考题库及答案详解(历年真题)
- 2026庐山云雾茶产业集团有限公司社会招聘工作人员16人备考题库及答案详解(名校卷)
- 2026福建省水投勘测设计有限公司招聘11人备考题库及答案详解(易错题)
- 2026北京航空航天大学电子信息工程学院聘用编软件工程师F岗招聘3人备考题库及答案详解一套
- 生态与人文共融:上海财经大学校园绿化美化改造提升研究
- 2026贵州贵阳观山湖人力资源服务有限公司工作人员招聘2人备考题库及答案详解(名师系列)
- 急性胰腺炎护理流程
- 2026年湖南省长沙市高一下学期期中模拟考试历史自编试卷01(统编版范围:《中外纲要史下》第1-11课)(试卷及参考答案)
- 2026青岛版(五四制)小学二年级数学下册主题活动《时间与生活》练习题(含答案解析)
- 四川巨鑫机电设备生产组装项目项目环境影响报告表
- 【2026年】汽车驾驶员(技师)考试题及答案
- (一模)东莞市2026年高三年级模拟考试生物试卷(含答案)
- 雨课堂学堂在线学堂云《机器学习实践(北京理工)》单元测试考核答案
- 世界经济概论知识点
- 2025航空工业信息技术中心(金航数码)校招备考题库必考题
- 深度解析(2026)《NYT 1965.1-2010 农药对作物安全性评价准则 第 1 部分:杀菌剂和杀虫剂对作物安全性评价室内试验方法》
- 氮气系统验证方案计划
评论
0/150
提交评论