汇编语言-统计字符串中的字符个数
汇编语言程序设计_第5章 分支循环程序设计(参考答案)

第5章分支、循环程序设计本章要点: 转移指令的寻址方式及其执行过程,控制转移类指令的使用,分支和循环程序的设计和应用。
程序调试的方法,常见问题的程序设计方法。
一、单项选择题5.1.1条件转移是根据标志寄存器中的标志位来判断的,条件判断的标志位共有( B )位。
A. 4B. 5C. 6D. 95.1.2用一条条件转移指令一次可以实现( A )个分支。
A. 2B. 3C. 4D. N5.1.3 条件转移指令的转移范围是(A)。
A. -128~127B. 0~255C. 0~65535D. -32768~327675.1.4 设A为字变量,B为标号,下列指令中不正确的是(D)。
A. MOV AX,AB. JNZ BC. JMP [SI]D. JMP B[BX]5.1.5 下述指令中影响CF标志位的是(A)。
A. SHL AL,1B. MOV AL,1C. JC LD. JNC L5.1.6 下述指令中不影响CF标志位的是(A)。
A. INC SIB. SUB SI,0C. NEG ALD. TEST AL,15.1.7 在多重循环程序设计中,每次通过外层循环进入内层循环时,其内层循环的初始条件(B)。
A. 不必考虑B. 必须重新设置C. 必须清0D. 必须置15.1.8 当设计一个程序时,最重要的是(B)。
A. 程序的结构化B. 能使程序正常运行并实现功能C. 程序的执行速度快D. 程序占用的存储空间小*5.1.9 如果“JNC L”指令的操作码放在0040H,转移后在0020H处取下一指令的操作码,那么这条指令的位移量是(C)。
A. 1EHB. 20HC. 0DEHD. 0E0H*5.1.10 如果“JGE P”指令的操作码放在0050H,该指令的位移量是34H,执行完这条指令转移取下一条指令的偏移地址是(C)。
A. 82HB. 84HC. 86HD. 88H二、填空题5.2.1 当下面循环程序中的划线处填上一个什么数字时,执行的循环次数最多?MOV CX,____0______MOV AX,0L:INC AXLOOP L5.2.2 当两个数进行比较后,执行__JE L(JZ L)表示两数相等则转移到L。
汇编语言——统计一个字符串中的大写字母、小写字母、数字和其他字符的个数,并显示

汇编语⾔——统计⼀个字符串中的⼤写字母、⼩写字母、数字和其他字符的个数,并显⽰;统计字符串中⼤写字母、⼩写字母、数字、其他字符的个数DATAS SEGMENT buf db '12ADdf#gh592HKL*','′tp1db0;⼤写字母个数 tp2db0;⼩写字母个数 tp3db0;数字的个数 tp4db0;其他字符的个数 str1db′thenumberofbigis:′,′' str2 db 'the number of small is:','′str3db′thenumberofnumberis:′,′' str4 db 'the number of other is:','′str5db0dH,0aH,′';换⾏DATAS ENDSSTACKS SEGMENT ;此处输⼊堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX lea si, buf mov cx, 16;设置循环次数 again: ;字符串结尾,结束程序 cmp byte ptr[si],'&' je exit ;0-9 cmp byte ptr[si],30h;⼩于30,其他字符加1 jb L1 cmp byte ptr[si],39h;⼤于39进⼀步⽐较 jbe L2 cmp byte ptr[si],41h jb L1 cmp byte ptr[si],5AH jbe L3 cmp byte ptr[si],61h jb L1 cmp byte ptr[si],7AH jbe L4 L1: inc tp4 jmp L5 L2: inc tp3 jmp L5 L3: inc tp1 jmp L5 L4: inc tp2 jmp L5 L5: add si,1 loop again ;显⽰⼤写字母 lea dx,str1 mov ah,09h int 21h mov bl,tp1 call disp ;调⽤⼦程序 mov ah,09h lea dx,str5 int 21h ;显⽰⼩写字母 lea dx,str2 mov ah,09h int 21h mov bl,tp2 call disp ;调⽤⼦程序 mov ah,09h lea dx,str5 int 21h ;显⽰数字 lea dx,str3 mov ah,09h int 21h mov bl,tp3 call disp ;调⽤⼦程序 mov ah,09h lea dx,str5 int 21h ;显⽰其他 lea dx,str4 mov ah,09h int 21h mov bl,tp4 call disp ;调⽤⼦程序 mov ah,09h lea dx,str5 int 21h exit: MOV AH,4CH INT 21H disp PROC ;显⽰BX中的数 mov ch,4 roll: mov cl,4 rol bx,cl mov dl,bl and dl,0fh cmp dl,9 jbe next1 add dl,07h next1: add dl,30h mov ah,02h int 21h dec ch jnz roll RET disp ENDPCODES ENDS END STARTProcessing math: 100%。
钱晓捷新版汇编语言程序设计习题答案(1-4)

钱晓捷新版汇编语言程序设计习题答案第一章汇编语言基础知识1.17、举例说明CF和OF标志的差异。
溢出标志OF和进位标志CF是两个意义不同的标志进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确;溢出标志表示有符号数运算结果是否超出范围,运算结果已经不正确•例1:3AH + 7CH=B6H无符号数运算:58+124=182,范围内,无进位有符号数运算: 58+124=182 ,范围外,有溢出•例2:AAH + 7CH=(1)26H无符号数运算:170+124=294,范围外,有进位有符号数运算:-86+124=28 ,范围内,无溢出1.20、8086有哪4种逻辑段,各种逻辑段分别是什么用途?(解答)代码段(Code Segment)用来存放程序的指令序列。
处理器利用CS : IP取得下一条要执行的指令•堆栈段(Stack Segment)确定堆栈所在的主存区域。
处理器利用SS : SP操作堆栈中的数据•数据段(Data Segment)存放当前运行程序所用的数据。
处理器利用DS : EA存取数据段中的数据•附加段(Extra Segment)是附加的数据段,也用于数据的保存。
处理器利用ES : EA存取数据段中的数据第二章8086指令系统2.1已知DS = 2000H、BX = 0100H、SI = 0002H,存储单元[20100H] ~ [20103H]依次存放12 34 56 78H,[21200H] ~ [21203H]依次存放2A 4C B7 65H,说明下列每条指令执行完后AX寄存器的内容。
(1) mov ax,1200h ;AX=1200h(2) mov ax,bx ; AX=0100h(3) mov ax,[1200h] ; AX=4C2Ah(4) mov ax,[bx] ; AX=3412h(5) mov ax,[bx+1100h] ; AX=4C2Ah(6) mov ax,[bx+si] ; AX=7856h(7) mov ax,[bx][si+1100h] ; AX=65B7h2.2指出下列指令的错误(1) mov cx,dl 两操作数类型不匹配(2) mov ip,ax IP 指令指针禁止用户访问(3) mov es,1234h 立即数不允许传给段寄存器(4) mov es,ds 段寄存器之间不允许传送(5) mov al,300 两操作数类型不匹配(6) mov [sp],ax 目的操作数应为[ BP ](7) mov ax,bx+di 源操作数应为 [BX+DI](8) mov 20h,ah 立即数不能作目的操作数2.3已知数字0 ~ 9对应的格雷码依次为:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H,它存在于以table为首地址(设为200H)的连续区域中。
统计字符串中某个字符出现次数

武汉理工大学《微机原理与接口技术》课程设计目录摘要 (1)1课程设计目的 (2)2设计条件及要求 (2)2.1程序设计条件 (2)2.2程序设计要求 (2)3总体方案论证 (2)3.1总体方案思路 (2)3.2方案注意事项 (3)3.3具体方案论证 (3)3.3.1方案一 (3)3.3.2方案二 (4)3.3.3方案论证 (4)4流程图设计及说明 (5)4.1流程图 (5)4.2设计说明 (5)5软件设计关键问题和相应程序段 (6)5.1关键问题说明 (6)5.2问题解决方法 (6)5.3相应程序段 (7)6程序调试 (9)7结果记录及分析 (10)8课程设计收获及心得体会 (12)9参考文献 (13)10附录 (14)摘要微机原理与接口技术作为计算机科学领域的基础知识,尽管计算机科学高速发展,但基本原理依然不变,即是遵循冯·诺依曼基本思想的。
学习并能掌握好微机原理与接口技术这门知识是非常重要的,通过对这门知识的了解可以简单的编写一些日常中经典的控制程序。
本文通过汇编语言编写程序,完成统计字符串中某个字符出现次数这一基本功能。
下面会介绍该程序的编程思路,并对程序设计中遇到的问题进行深入的研究。
关键字:微机统计编程统计字符串中某个字符出现次数汇编语言程序设计1课程设计目的通过本次课程设计,熟悉微机原理与接口技术的基本理论,使学生能够进一步了解微型计算机工作原理, 微型计算机的硬件结构及微型计算机软件编程,掌握使用汇编语言编写程序的方法,并进一步提高编程设计能力。
2设计条件及要求本次《微机原理与接口技术》课程设计的题目为统计字符串中某个字符出现的次数,为汇编程序设计。
2.1程序设计条件采用16位微处理器8086 CPU以及86系列微型计算机的指令系统;软件设计平台为多功能微型计算机实验软件MFS中的微机原理实验集成环境MF2KP。
2.2程序设计要求设计汇编语言程序,实现统计字符串中某个字符出现次数的功能,具体功能要求如下:(1)提示输入字符串;输入任意字符串string ,点击Enter结束输入;(2)提示输入字符;输入任意字符ch,点击Enter 结束输入;(3)输出字符串string 中字符ch的出现次数。
【精品文档】汇编语言-统计字符串中的字符个数

prompt2 byte cr, lf, "the string have ", 0 count1 dword 11 dup (?) prompt3 byte ' char',cr, lf, 0 string byte 100 dup (?)
.CODE count
proc near32 push ebp mov ebp, esp
INCLUDE io.h
; header file for input/output
cr
EQU 0dh ; carriage return character
Lf
EQU 0ah ; line feed
.STACK 4096
; reserve 4096-byte stack
.DATA prompt1 byte cr, lf, "Please input your string:",cr, lf,0
实 验 结 果 分 析 及 心 得 体 会
成 绩 评 定
备注:源代码附后,源代码要求有注释说明
教师签名mple assembly language program -- count number of chars in the string ; Author: duchuanhu ; Date: revised 12/08
.386 .MODEL FLAT
ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD
output prompt2 output count1 + 8 output prompt3
INVOKE ExitProcess, 0 ; exit with return code 0
北京理工大学汇编语言实验报告实验三字符串操作实验

北京理工大学汇编语言实验报告实验三字符串操作实验实验三字符串操作实验一、实验目的1)熟悉串操作指令的功能与应用;2)掌握串操作指令的寻址方式及使用方法,编写常用的字符串处理程序;3)了解汇编语言字符串处理基本流程;二、实验软硬件环境1)硬件环境:惠普64位一体化计算机及局域网; 2)软件环境:windows 8,红蜘蛛管理系统,MASM for Win dows三、实验相关知识1)字符串操作流程SI寄存器保存源串首地址;DI寄存器保存目的串首地址;CX寄存器保存字符串长度;CLD或STD指令设置字符串处理方向;2)重复前缀指令重复次数由计数寄存器CX中存放的值决定,指令每重复执行一次,计数器CX中值减1,当CX 中值减至0时,停止重复执行,继续执行下一条指令。
寄存器的E内容条件为复前罡重复与操作直配合工作的字符串处理指令有MOVSSTOS^ LODS当REPE/REP判断计数寄存器的内容CX是否为0或ZF=O(即比较的两个操作数不等)亠只要满足一个则重复执行结束,否则继续执行。
可以与REPE/REP配合工作的串指令有CMP和SCAS0或體茴比较P判个操数数相等的内容要满足一个则重复执行结束,否则继续执行。
可以与REPE/REP配合工作的串指令有CMPS口SCAS3)字符串操作指令lodsb、lodsw :把DS:SI 指向的存储单元中的数据装入AL或AX然后根据DF标志增减SI ;stosb、stosw :把AL 或AX 中的数据装入ES:DI指向的存储单元,然后根据DF标志增减DI ;movsb movsw把DS:SI 指向的存储单元中的数据装入ES:DI指向的存储单元中,然后根据DF 标志分别增减SI和DI ;scasb、scasw:把AL或AX中的数据与ES:DI指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI ;cmpsb cmpsw把DS:SI指向的存储单元中的数据与ES:DI指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI ;rep :重复其后的串操作指令。
统计键盘输入字符、数字个数”

“统计键盘输入字符、数字个数”实验报告一、实验目的1、学习循环程序结构,掌握编写循环处理程序的方法和技巧。
2、通过循环结构程序熟悉汇编语言程序设计的主要方法。
3、了解和掌握程序设计过程中算法的选择。
4、掌握汇编语言的调试方法。
二、实验内容从键盘输入一系列字符(每种字符不超过9)并以回车符结束,请统计出字母、数字及其它字符的个数,最后在屏幕上显示计数结果。
三、实验过程1、编写程序,后附程序代码2、测试程序输入四组不同的测试字符串,得到NUMBER值为数字个数,CHAR值为字母个数,REST为符号个数。
三、结果分析和思考结果分析:由测试中可以看出,三种字符显示的个数范围是0~9,大于9之后的就会显示个数的数值加30H之后的数值对应的ASCII码值,这是因为显示个数的时候,我的思路是将个数分别存储在NUMBER,CHAR,REST中,然后显示它们的值加30H后所对应的ASCII码值,因此如果想要显示两位数、三位数的数值,就要在最后输出的时候改变输出的方法,将两位数、三位数的数值输出。
改进思路:先将前面程序计算出的个数三位数放到AL中,然后调用除法指令DIV除以100得到百位数字,而后除以10得到十位数字,和余下的个位数字。
就可以得到000~999显示范围的字符个数。
在调用除法的过程中,被除数在AX中,商在AL中,余数在AH中以数字个数NUMBER为例:MOV AL,NUMBER 将NUMBER送到ALMOV AH,0 ;对应百位MOV BL 100DIV BLMOV BL,AH ;余数在AHMOV AH,2 ;显示最高位(除以100的余数为最高位,存在AH中)ADD AL,30HMOV DL,ALINT 21HMOV AL,BL ;对应十位MOV AH,0MOV BL,10DIV BLMOV BL,AH ;余数在AHMOV AH,2 ;显示中间位(除以10的余数为中间位,存在AH中)ADD AL,30HMOV DL,ALINT 21HMOV DL,BL;对应个位数字ADD DL,30HMOV AH,2 ;显示个位INT 21H四、代码DSEG SEGMENTNUMBER DB 0 ;存储数字个数CHAR DB 0 ;字母个数REST DB 0 ;字符个数STR1 DB 'NUMBER:','$' ;输出提示”NUMBER:”STR2 DB ' CHAR:','$' ;输出提示”CHAR:”STR3 DB ' REST:','$' ;输出提示”REST:”DSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEGSTART:MOV AX,DSEGMOV DS,AXAGAIN:MOV AH,1INT 21HCMP AL,0DH ;判断字符是否为回车JZ EXIT ;是回车,跳转到结束语句CMP AL,'0' ;不是回车,判断是否大于’0’JNL NEXT1 ;大于‘0’,跳转到NEXT1INC REST ; 小于’0’,是字符,REST自增1JMP AGAIN ;AGAIN循环NEXT1:CMP AL,'9' ;判断是否小于’9’JBE N1 ;小于9,是数字,跳转到N1CMP AL,65;大于9,不是数字,跟’a’比较JNL NEXT2 ;大于’a’,跳转到NEXT2INC REST ;小于’a’,是字符,REST自增1JMP AGAIN;返回循环NEXT2:CMP AL,90 ;跟’z’作比较JBE N2 ;小于’z’,是字母,跳转到N2CMP AL,97 ;大于’z’,跟‘A’比较JNL NEXT3 ;大于’A’跳转到NEST3INC REST ;大于’z’,小于‘A’,是字符,REST自增1 JMP AGAIN ;返回循环NEXT3:CMP AL,122 ;跟’Z’比较JBE N2 ;小于’Z’,是大写字母,跳转到N2INC REST ;不是字母,是字符,REST自增1JMP AGAIN ;返回循环N1:INC NUMBER ;判断为数字,NUMBER自增1JMP AGAIN ;返回循环N2:INC CHAR ;判断为字母,CHAR自增1JMP AGAIN ;返回循环EXIT:LEA DX,STR1MOV AH,09HINT 21H ;显示提示“NUMBER:”MOV DL,NUMBER ;NUMBER送到DLADD DL,30HMOV AH,2INT 21H ;显示NUMBER的值LEA DX,STR2MOV AH,09HINT 21H ;显示提示“CHAR:”MOV DL,CHAR ;CHAR送到DLADD DL,30HMOV AH,2INT 21H ;显示CHAR的值LEA DX,STR3MOV AH,09HINT 21H ;显示提示”REST:”MOV DL,REST ;REST送到DLADD DL,30HMOV AH,2INT 21H ;显示REST的值MOV AH,4CHINT 21H ;程序结束CSEG ENDSEND START。
汇编语言程序设计(第四版)第2章【课后答案】讲解

汇编语言程序设计第四版【课后习题答案】--囮裑為檤第2章8086的指令系统〔习题2.1〕已知DS=2000H、BX=0100H、SI=0002H,存储单元[20100H]~[20103H]依次存放12 34 56 78H,[21200H]~[21203H]依次存放2A 4C B7 65H,说明下列每条指令执行完后AX寄存器的内容。
(1)mov ax,1200h(2)mov ax,bx(3)mov ax,[1200h](4)mov ax,[bx](5)mov ax,[bx+1100h](6)mov ax,[bx+si](7)mov ax,[bx][si+1100h]〔解答〕(1)AX=1200H(2)AX=0100H(3)AX=4C2AH ;偏移地址=bx=0100h(4)AX=3412H ;偏移地址=bx=0100h(5)AX=4C2AH ;偏移地址=bx+1100h=1200h(6)AX=7856H ;偏移地址=bx+si=0100h+0002h=0102h(7)AX=65B7H ;偏移地址=bx+si+1100h=0100h+0002h+1100h=1202h〔习题2.2〕指出下列指令的错误(1)mov cx,dl(2)mov ip,ax(3)mov es,1234h(4)mov es,ds(5)mov al,300(6)mov [sp],ax(7)mov ax,bx+di(8)mov 20h,ah〔解答〕(1)两操作数类型不匹配(2)IP指令指针禁止用户访问(3)立即数不允许传给段寄存器(4)段寄存器之间不允许传送(5)两操作数类型不匹配(6)目的操作数应为[ SI ](7)源操作数应为[BX+DI](8)立即数不能作目的操作数〔习题2.3〕已知数字0 ~ 9对应的格雷码依次为:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H,它存在于以table为首地址(设为200H)的连续区域中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
output count1 + 8
output prompt3
INVOKE ExitProcess, 0 ; exit with return code 0
PUBLIC _start ; make entry point public
END ; end of source code
年级
2010级
班号
学号
专业
计算机科学与技术
姓名
实验名称
统计字符串中的字符个数
实验
类型
设计型
综合型
创新型
√
实
验
目
的
或
要
求
1、题目:设有一字符串存放在以STRING为首址的数据区中,编一程序,计算该字符串的长度并输出。
2、要求:从键盘输入字符串,要求使用串操作指令来计算字符串的长度。
实
验
原
理
(
算
法
流
程
)
prompt2 byte cr, lf, "the string have ", 0
count1 dword 11 dup (?)
prompt3 byte ' char',cr, lf, 0
string byte 100 dup (?)
.CODE ; start of main program code
endWhileNoNull:
popf
pop esi
mov esp, ebp
pop ebp
ret 4
count endp
_start:
output prompt1
input string, 100
lea eax, string
push eax
call count
mov eax, count1
dtoa count1, eax
INCLUDE io.h ; header file for input/output
cr EQU 0dh ; carriage return character
Lf EQU 0ah ; line feed
.STACK 4096 ; reserve 4096-byte stack
.DATA
prompt1 byte cr, lf, "Please input your string:",cr, lf,0
源程序代码如下:
;Example assembly language program -- count number of chars in the string
; Author: duchuanhu
; Date: revised 12/08
.386
.MODEL FLAT
ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD
实
验
结Байду номын сангаас
果
分
析
及
心
得
体
会
成
绩
评
定
教师签名:
年月日
备注:源代码附后,源代码要求有注释说明
count proc near32
push ebp
mov ebp, esp
push edx
pushf
mov esi, [ebp+8]
cld
whileNoNull:
cmp byte ptr [esi], 0
je endWhileNoNull
inc count1
inc esi
jmp whileNoNull